併發學習(二)Lock簡介

有了synchronized怎麼還需要Lock

併發書上是這麼介紹的

鎖是用來控制多個線程訪問共享資源的方式,一般來說,一個鎖能夠防止多個線程同時訪問共享資源(但是有些鎖可以允許多個線程併發的訪問共享資源,比如讀寫鎖)。在Lock接口出現之前,Java程序是靠synchronized關鍵字實現鎖功能的,而Java SE 5之後,併發包中新增了Lock接口(以及相關實現類)用來實現鎖功能,它提供了與synchronized關鍵字類似的同步功能,只是在使用時需要顯式地獲取和釋放鎖。雖然它缺少了(通過synchronized塊或者方法所提供的)隱式獲取釋放鎖的便捷性,但是卻擁有了鎖獲取與釋放的可操作性、可中斷的獲取鎖以及超時獲取鎖等多種synchronized關鍵字所不具備的同步特性。

我自己的總結

前面講到的synchronized已經可以很好的實現線程併發訪問的安全性,但是某些場景下也是會有侷限性的,因爲它是jvm底層實現的,底層代碼我們沒法控制,這屬於一種隱式的加鎖方式。而lock不一樣,它提供了一些api方法能夠讓我們通過java代碼手動的獲取鎖和釋放鎖,這樣會更加靈活,屬於顯式的加鎖方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章