Synchronized和Lock的區別

鎖類型:

可重入鎖:在執行對象中全部的同步方法時,沒必要再次去獲取鎖java

可中斷鎖:在等待獲取鎖過程當中可中斷多線程

讀寫鎖:對線程的讀寫分爲兩個部分,讀過程當中多線程可一塊兒訪問readLock,寫過程當中必須同步一塊兒讀jvm

公平鎖:按照等待獲取鎖時間長的長短來獲取鎖,等待越長的具備優先得到鎖的權利性能

 

Synchronized

存在層次上:java的關鍵字,在jvm層面spa

鎖的釋放:以獲取鎖的代碼塊執行完畢釋放,如果異常,jvm則會讓線程釋放鎖線程

鎖的阻塞:如果A線程得到鎖,則B等待;如果A出現阻塞,則B一直處於阻塞對象

鎖狀態:沒法判斷接口

鎖類型:可重入、非公平、不可中斷同步

性能:少許同步it

 

Lock

存在層次上:java

鎖的釋放:在finally中必須釋放鎖,lock.unlock,不然會形成死鎖

鎖的阻塞:分狀況而定,線程能夠嘗試得到鎖,線程能夠不用一直等待,主要是參考Lock接口中的lockInterruptibly()方法

鎖狀態:能夠判斷,能夠經過trylock()方法來得知當前線程是否得到鎖

鎖類型:可重入、公平(亦可非公平)、可中斷;ReentrantLock中默認是非公平鎖的,new NofairSync

性能:大量同步

相關文章
相關標籤/搜索