synchronized和lock的區別

2021-08-07 15:54:08 字數 1043 閱讀 9179

主要相同點:lock能完成synchronized所實現的所有功能

主要不同點:lock有比synchronized更精確的執行緒語義和更好的效能,synchronized會自動釋放鎖,而lock一定要在finally中手動釋放:unlock()

synchronized限制:

1.無法中斷乙個正在等候獲得鎖的執行緒

2.也無法通過投票得到鎖,如果不想等下去,也就沒法得到鎖。

1.reentrantlock擁有synchronized相同的併發性和記憶體語義, 此外還多了鎖投票,定時鎖和中斷鎖等候鎖。

執行緒a和b都要獲取物件o的鎖定。假設a獲取了物件鎖o,b將等待a釋放對o的鎖定

若使用synchronied,如果a不釋放,b將一直等下去,不能被中斷;

若使用reentrantlock,如果a不釋放,可以使b在等待了足夠長的時間以後,中斷等待,而幹別的事情。

rentrantlock獲取鎖定與三種方式:

lock():如果獲取了鎖即返回,如果別的執行緒持有鎖,當前執行緒則一直處於休眠狀態,直到獲取鎖、

trylock():如果獲取了鎖立即返回true,如果別的執行緒正持有鎖,立即返回false.

trylock(long timeout,timeunit unit):如果獲取了鎖定立即返回true,如果別的執行緒支援有鎖,會等待引數給定的時間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時,返回false.

lockinterruptibly:如果獲取了鎖定立即返回,如果沒有獲取鎖定,當前執行緒處於休眠狀態,直到或者鎖定,或者當前執行緒被別的執行緒中斷

2.synchronized是在jvm層面實現的,不但可以通過一些監控工具監控synchronized的鎖定,而且在**執行時出現異常,jvm會自動釋放所定,但是用lock則不行,lock是通過**實現的,要保證鎖定一定會被釋放,須將unlock()放到finally()中

3.資源競爭不是很激烈的情況下,synchronized的效能要優於reentrantlock,但是在資源競爭很激烈的情況下,reentrantlock效能更能維持常態、

4.

lockInterruptibly和lock的區別

size medium lock 拿不到lock就不罷休,不然執行緒就一直block。lockinterruptibly會優先響應執行緒中斷,處理響應的方式是丟擲interruptedexception。size 可以從原始碼看出來的 private void doacquireinterrupti...

synchronized和volatile的區別?

一旦乙個共享變數 類的成員變數 類的靜態成員變數 被volatile修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是 立即可見的。2 禁止進行指令重排序。volatile本質是在告訴jvm當前變數在暫存器 工作...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...