面試題之synchronized與Lock的區別

一、簡介

今天我們總結一下關於JUC方面的面試題:

  • synchronized與Lock的區別?

如果面試遇到這個問題,小夥伴們可以參考從以下幾個方面進行回答:

區別

synchronized

Lock

是否關鍵字

synchronized是Java內置關鍵字

Lock類是一個接口

是否可嘗試獲取鎖

synchronized無法判斷是否獲取鎖的狀態

Lock可以判斷是否獲取到鎖

是否自動釋放鎖

synchronized會自動釋放鎖(a 線程執行完同步代碼會釋放鎖 ;b 線程執行過程中發生異常會釋放鎖)

Lock需在finally中手工釋放鎖(unlock()方法釋放鎖),否則容易造成線程死鎖

是否一直阻塞

用synchronized關鍵字修飾的兩個線程1和線程2,如果當前線程1獲得鎖,線程2線程等待。如果線程1阻塞,線程2則會一直等待下去

Lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,線程可以不用一直等待就結束了

是否可重入、中斷、公平鎖

synchronized的鎖可重入、不可中斷、非公平

Lock鎖可重入、可中斷、可公平(也可非公平)

使用場合

synchronized鎖適合代碼少量的同步問題

Lock鎖適合大量同步的代碼的同步問題

總體來說,Lock鎖比synchronized更加靈活,提供了更加豐富的API進行同步操作,也可以結合Condition條件實現比較複雜的線程間同步通信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章