關鍵字:Synchronized和lock

synchronized是Java的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。JDK1.5以後引入了自旋鎖、鎖粗化、輕量級鎖,偏向鎖來有優化關鍵字的性能。

Lock:JDK5新增了 Lock接口和實現類ReentrantLock(重入鎖),利用lock()【阻塞式】,tryLock()【非阻塞式】,lockInterruptibly()【獲得了鎖就返回,否則線程就休眠,知道獲得鎖】。
使用lock前先:
Lock lock = new ReentrantLock();
再用lock進行加鎖(lock.lock())和釋放鎖(lock.unlock() )。

區別:
1、Synchronized可以加在方法上,也可以加載代碼塊上,而Lock要顯式的制定起始位置,即lock()和unlock()。Synchronized是託管給JVM的,Lock的鎖定是通過代碼實現的。
2、競爭不激烈時,Synchronized性能優於ReentrantLock,競爭激烈時,Synchronized性能差。
3、Synchronized會自動釋放鎖,而Lock需要在finally塊中手動釋放鎖。

發佈了58 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章