在上一篇文章中我們講到了如何使用關鍵字synchronized來實現(xiàn)同步訪問。本文我們繼續(xù)來探討這個問題,從Java 5之后,在java.util.concurrent.locks包下提供了另外一種方式來實現(xiàn)同步訪問,那就是Lock。
也許有朋友會問,既然都可以通過synchronized來實現(xiàn)同步訪問了,那么為什么還需要提供Lock?這個問題將在下面進行闡述。本文先從synchronized的缺陷講起,然后再講述java.util.concurrent.locks包下常用的有哪些類和接口,最后討論以下一些關于鎖的概念方面的東西
synchronized缺陷
前面我們說過synchronized的線程釋放鎖的情況有兩種:
代碼塊或者同步方法執(zhí)行完畢
代碼塊或者同步方法出現(xiàn)異常有jvm自動釋放鎖
從上面的synchronized釋放鎖可以看出,只有synchronized代碼塊執(zhí)行完畢或者異常才會釋放,如果代碼塊中的程序因為IO原因阻塞了,那么線程將永遠不會釋放鎖,但是此時另外的線程還要執(zhí)行其他的程序,極大的影響了程序的執(zhí)行效率,現(xiàn)在我們需要一種機制能夠讓線程不會一直無限的等待下去,能夠響應中斷,這個通過lock就可以辦到
另外如果有一個程序,包含多個讀線程和一個寫線程,我們可以知道synchronized只能一個一個線程的執(zhí)行,但是我們需要多個讀線程同時進行讀,那么使用synchronized肯定是不行的,但是我們使用lock同樣可以辦到
Lock
查看API可知,Lock是一個接口,因此是不可以直接創(chuàng)建對象的,但是我們可以利用其實現(xiàn)的類來創(chuàng)建對象,這個先不著急,我們先看看Lock類到底實現(xiàn)了什么方法,具體的實現(xiàn)我們將會在介紹其實現(xiàn)的類的時候再詳細的講解
方法
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26
學習是年輕人改變自己的最好方式