【鎖】深刻理解ReentrantLock

深刻理解ReentrantLockjava

在Java中一般實現鎖有兩種方式,一種是synchronized關鍵字,另外一種是Lock。兩者其實並無什麼必然聯繫,可是各有各的特色,在使用中能夠進行取捨的使用。首先咱們先對比下二者。
實現:併發

首先最大的不一樣:synchronized是基於JVM層面實現的,而Lock是基於JDK層面實現的。曾經反覆的找過synchronized的實現,惋惜最終無果。但Lock倒是基於JDK實現的,咱們能夠經過閱讀JDK的源碼來理解Lock的實現。
使用:性能

對於使用者的直觀體驗上Lock是比較複雜的,須要lock和realse,若是忘記釋放鎖就會產生死鎖的問題,因此,一般須要在finally中進行鎖的釋放。可是synchronized的使用十分簡單,只須要對本身的方法或者關注的同步對象或類使用synchronized關鍵字便可。可是對於鎖的粒度控制比較粗,同時對於實現一些鎖的狀態的轉移比較困難。例如:
特色:
tips synchronized Lock
鎖獲取超時 不支持 支持
獲取鎖響應中斷 不支持 支持
優化:優化

在JDK1.5以後synchronized引入了偏向鎖,輕量級鎖和重量級鎖,從而大大的提升了synchronized的性能,同時對於synchronized的優化也在繼續進行。期待有一天能更簡單的使用java的鎖。對象

在之前不瞭解Lock的時候,感受Lock使用實在是太複雜,可是瞭解了它的實現以後就被深深吸引了。ip

Lock的實現主要有ReentrantLock、ReadLock和WriteLock,後二者接觸的很少,因此簡單分析一下ReentrantLock的實現和運行機制。同步

ReentrantLock類在java.util.concurrent.locks包中,它的上一級的包java.util.concurrent主要是經常使用的併發控制類.源碼

相關文章
相關標籤/搜索