1. 程式人生 > 其它 >【面試題】synchronized和Lock鎖的區別

【面試題】synchronized和Lock鎖的區別

synchronized和Lock鎖的區別
  1. synchronized是java內建關鍵字,是在JVM層面實現的;Lock是java的一個介面,是通過程式碼實現的,為具體的java類(java.util.concurrent.locks.Lock),屬於API層面的鎖;

  2. synchronized無法判斷是否獲取鎖的狀態,Lock可以判斷是否獲取到鎖;

  3. synchronized會自動釋放鎖(a 執行緒執行完同步程式碼會釋放鎖;b 執行緒執行過程中發生異常會釋放鎖),Lock需在finally中手工釋放鎖(unlock()方法釋放鎖);否則,容易造成執行緒死鎖;

  4. 用synchronized關鍵字修飾的兩個執行緒1和執行緒2,假設執行緒1獲得鎖,執行緒2等待。如果執行緒1阻塞,執行緒2則會一直等待下去,而Lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,執行緒可以不用一直等待就結束了;

  5. synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可中斷、可公平;

  6. Lock鎖的範圍是塊,而synchronized可以鎖住塊、物件、類;

  7. Lock鎖適合大量程式碼同步的問題,synchronized鎖適合少量程式碼的同步問題。

  Lock介面如下:

public interface Lock {
    void lock();
    void lockInterruptibly() throws InterruptedException;
    boolean tryLock();
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    void unlock();
    Condition newCondition();
}

  讀後有收穫,小禮物走一走,請作者喝咖啡。

讚賞支援