在上一篇文章中我們講到了如何使用關(guān)鍵字synchronized來實(shí)現(xiàn)同步訪問。本文我們繼續(xù)來探討這個(gè)問題,從Java 5之后,在java.util.concurrent.locks包下提供了另外一種方式來實(shí)現(xiàn)同步訪問,那就是Lock。

也許有朋友會(huì)問,既然都可以通過synchronized來實(shí)現(xiàn)同步訪問了,那么為什么還需要提供Lock?這個(gè)問題將在下面進(jìn)行闡述。本文先從synchronized的缺陷講起,然后再講述java.util.concurrent.locks包下常用的有哪些類和接口,最后討論以下一些關(guān)于鎖的概念方面的東西

synchronized缺陷

前面我們說過synchronized的線程釋放鎖的情況有兩種:

  1. 代碼塊或者同步方法執(zhí)行完畢

  2. 代碼塊或者同步方法出現(xiàn)異常有jvm自動(dòng)釋放鎖

從上面的synchronized釋放鎖可以看出,只有synchronized代碼塊執(zhí)行完畢或者異常才會(huì)釋放,如果代碼塊中的程序因?yàn)镮O原因阻塞了,那么線程將永遠(yuǎn)不會(huì)釋放鎖,但是此時(shí)另外的線程還要執(zhí)行其他的程序,極大的影響了程序的執(zhí)行效率,現(xiàn)在我們需要一種機(jī)制能夠讓線程不會(huì)一直無限的等待下去,能夠響應(yīng)中斷,這個(gè)通過lock就可以辦到

另外如果有一個(gè)程序,包含多個(gè)讀線程和一個(gè)寫線程,我們可以知道synchronized只能一個(gè)一個(gè)線程的執(zhí)行,但是我們需要多個(gè)讀線程同時(shí)進(jìn)行讀,那么使用synchronized肯定是不行的,但是我們使用lock同樣可以辦到

Lock

查看API可知,Lock是一個(gè)接口,因此是不可以直接創(chuàng)建對(duì)象的,但是我們可以利用其實(shí)現(xiàn)的類來創(chuàng)建對(duì)象,這個(gè)先不著急,我們先看看Lock類到底實(shí)現(xiàn)了什么方法,具體的實(shí)現(xiàn)我們將會(huì)在介紹其實(shí)現(xiàn)的類的時(shí)候再詳細(xì)的講解

方法

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式