synchronize與lock的區別


題目: S ynchronized 和Lock有什么區別?用新的ock有什么好處?你舉例說說
1原始構成
synchronized是關鍵字屬於JVM層面,
moni torenter(底層是通過tmonitor對象來完成,其實wait/notify等方法也依賴Fmonitor對象只有在同步塊或方法中力能漏wait/
monitorexit
Lock是具體類(java. util. concurrent. locks. Lock)是api層面的鎖
* 2使用方法
synchronized不需要用戶去手動釋放鎖,當synchronized代碼執 行完后系統會自動讓線程釋放對鎖的占用
ReentrantLock則需要用戶去手動釋放鎖若沒有主動釋放鎖,就有可能導致出現死鎖現象。
需要Lock() lnlock()方法配合try/finally語句塊來完成。
3等待是否可中斷
synchronized不可中斷,除非拋出異常或者正常運行完成
ReentrantLock可中斷,1. 設置超時方法tryLock(long timeout, TimeUnit unit)
2. lockInterruptibly()放代碼塊中,調用interrupt() 方法可中斷
4加鎖是否公平
synchronized非公平鎖
Reentrantlock兩者都可以,默認非公平鎖,構造方法可以傳入boolean值,true為公平鎖,false為非公 平鎖
5鎖綁定多個條f件Condition
synchronized沒有
Reentrantlock用來實現分組喚醒需要喚醒的線程們,可以精確喚醒,而不是像synchronized要么隨機喚醒一個線程 要么喚醒全部線程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM