一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java concurrency之鎖_動力節點Java學院整理

Java concurrency之鎖_動力節點Java學院整理

2020-11-11 16:28動力節點skywang12345 Java教程

這篇文章主要為大家詳細介紹了Java concurrency之鎖的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

根據的添加到Java中的時間,Java中的鎖,可以分為"同步鎖"和"JUC包中的鎖"。

同步鎖

  即通過synchronized關鍵字來進行同步,實現對競爭資源的互斥訪問的鎖。Java 1.0版本中就已經支持同步鎖了。

  同步鎖的原理是,對于每一個對象,有且僅有一個同步鎖;不同的線程能共同訪問該同步鎖。但是,在同一個時間點,該同步鎖能且只能被一個線程獲取到。這樣,獲取到同步鎖的線程就能進行CPU調度,從而在CPU上執行;而沒有獲取到同步鎖的線程,必須進行等待,直到獲取到同步鎖之后才能繼續運行。這就是,多線程通過同步鎖進行同步的原理!  

JUC包中的鎖 

  相比同步鎖,JUC包中的鎖的功能更加強大,它為鎖提供了一個框架,該框架允許更靈活地使用鎖,只是它的用法更難罷了。

  JUC包中的鎖,包括:Lock接口,ReadWriteLock接口,LockSupport阻塞原語,Condition條件,AbstractOwnableSynchronizer/AbstractQueuedSynchronizer/AbstractQueuedLongSynchronizer三個抽象類,ReentrantLock獨占鎖,ReentrantReadWriteLock讀寫鎖。由于CountDownLatch,CyclicBarrier和Semaphore也是通過AQS來實現的;因此,我也將它們歸納到鎖的框架中進行介紹。

  先看看鎖的框架圖,如下所示。

Java concurrency之鎖_動力節點Java學院整理

01. Lock接口

  JUC包中的 Lock 接口支持那些語義不同(重入、公平等)的鎖規則。所謂語義不同,是指鎖可是有"公平機制的鎖"、"非公平機制的鎖"、"可重入的鎖"等等。"公平機制"是指"不同線程獲取鎖的機制是公平的",而"非公平機制"則是指"不同線程獲取鎖的機制是非公平的","可重入的鎖"是指同一個鎖能夠被一個線程多次獲取。 

02. ReadWriteLock

  ReadWriteLock 接口以和Lock類似的方式定義了一些讀取者可以共享而寫入者獨占的鎖。JUC包只有一個類實現了該接口,即 ReentrantReadWriteLock,因為它適用于大部分的標準用法上下文。但程序員可以創建自己的、適用于非標準要求的實現。 

03. AbstractOwnableSynchronizer/AbstractQueuedSynchronizer/AbstractQueuedLongSynchronizer

  AbstractQueuedSynchronizer就是被稱之為AQS的類,它是一個非常有用的超類,可用來定義鎖以及依賴于排隊阻塞線程的其他同步器;ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier和Semaphore等這些類都是基于AQS類實現的。AbstractQueuedLongSynchronizer 類提供相同的功能但擴展了對同步狀態的 64 位的支持。兩者都擴展了類 AbstractOwnableSynchronizer(一個幫助記錄當前保持獨占同步的線程的簡單類)。

04. LockSupport

  LockSupport提供“創建鎖”和“其他同步類的基本線程阻塞原語”。 

  LockSupport的功能和"Thread中的Thread.suspend()和Thread.resume()有點類似",LockSupport中的park() 和 unpark() 的作用分別是阻塞線程和解除阻塞線程。但是park()和unpark()不會遇到“Thread.suspend 和 Thread.resume所可能引發的死鎖”問題。 

05. Condition

  Condition需要和Lock聯合使用,它的作用是代替Object監視器方法,可以通過await(),signal()來休眠/喚醒線程。
Condition 接口描述了可能會與鎖有關聯的條件變量。這些變量在用法上與使用 Object.wait 訪問的隱式監視器類似,但提供了更強大的功能。需要特別指出的是,單個 Lock 可能與多個 Condition 對象關聯。為了避免兼容性問題,Condition 方法的名稱與對應的 Object 版本中的不同。 

06. ReentrantLock

  ReentrantLock是獨占鎖。所謂獨占鎖,是指只能被獨自占領,即同一個時間點只能被一個線程鎖獲取到的鎖。ReentrantLock鎖包括"公平的ReentrantLock"和"非公平的ReentrantLock"。"公平的ReentrantLock"是指"不同線程獲取鎖的機制是公平的",而"非公平的  ReentrantLock"則是指"不同線程獲取鎖的機制是非公平的",ReentrantLock是"可重入的鎖"。

  ReentrantLock的UML類圖如下:

Java concurrency之鎖_動力節點Java學院整理

  (01) ReentrantLock實現了Lock接口。
  (02) ReentrantLock中有一個成員變量sync,sync是Sync類型;Sync是一個抽象類,而且它繼承于AQS。
  (03) ReentrantLock中有"公平鎖類"FairSync和"非公平鎖類"NonfairSync,它們都是Sync的子類。ReentrantReadWriteLock中sync對象,是FairSync與NonfairSync中的一種,這也意味著ReentrantLock是"公平鎖"或"非公平鎖"中的一種,ReentrantLock默認是非公平鎖。 

07. ReentrantReadWriteLock

  ReentrantReadWriteLock是讀寫鎖接口ReadWriteLock的實現類,它包括子類ReadLock和WriteLock。ReentrantLock是共享鎖,而WriteLock是獨占鎖。

  ReentrantReadWriteLock的UML類圖如下:

Java concurrency之鎖_動力節點Java學院整理

       (01) ReentrantReadWriteLock實現了ReadWriteLock接口。
  (02) ReentrantReadWriteLock中包含sync對象,讀鎖readerLock和寫鎖writerLock。讀鎖ReadLock和寫鎖WriteLock都實現了Lock接口。
  (03) 和"ReentrantLock"一樣,sync是Sync類型;而且,Sync也是一個繼承于AQS的抽象類。Sync也包括"公平鎖"FairSync和"非公平鎖"NonfairSync。

08. CountDownLatch

  CountDownLatch是一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。 
  CountDownLatch的UML類圖如下:

Java concurrency之鎖_動力節點Java學院整理

  CountDownLatch包含了sync對象,sync是Sync類型。CountDownLatch的Sync是實例類,它繼承于AQS。 

09. CyclicBarrier

  CyclicBarrier是一個同步輔助類,允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。因為該 barrier 在釋放等待線程后可以重用,所以稱它為循環 的 barrier。

  CyclicBarrier的UML類圖如下:

Java concurrency之鎖_動力節點Java學院整理

  CyclicBarrier是包含了"ReentrantLock對象lock"和"Condition對象trip",它是通過獨占鎖實現的。
  CyclicBarrier和CountDownLatch的區別是:
  (01) CountDownLatch的作用是允許1或N個線程等待其他線程完成執行;而CyclicBarrier則是允許N個線程相互等待。
  (02) CountDownLatch的計數器無法被重置;CyclicBarrier的計數器可以被重置后使用,因此它被稱為是循環的barrier。 

10. Semaphore

  Semaphore是一個計數信號量,它的本質是一個"共享鎖"。

  信號量維護了一個信號量許可集。線程可以通過調用acquire()來獲取信號量的許可;當信號量中有可用的許可時,線程能獲取該許可;否則線程必須等待,直到有可用的許可為止。 線程可以通過release()來釋放它所持有的信號量許可。

  Semaphore的UML類圖如下:

Java concurrency之鎖_動力節點Java學院整理

和"ReentrantLock"一樣,Semaphore包含了sync對象,sync是Sync類型;而且,Sync也是一個繼承于AQS的抽象類。Sync也包括"公平信號量"FairSync和"非公平信號量"NonfairSync。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本视频在线免费播放 | 日韩免费一级片 | 青草青草伊人精品视频 | 日韩国产欧美一区二区三区 | bedfriend泰剧全集免费观看 | 国产精品99爱免费视频 | 亚洲日本中文字幕天天更新 | 99这里只有精品66视频 | 亚洲国产一区 | 三极片在线观看 | 全是女性放屁角色的手游 | 1313午夜精品久久午夜片 | 国产91免费 | 亚洲精品一区二区三区在线观看 | 99re这里只有精品在线观看 | 日韩毛片基地一区二区三区 | 国产精品欧美在线观看 | 无套内射在线观看THEPORN | 西西人体大胆啪啪私拍色约约 | 嫩草成人影院 | 亚洲国产成人精品 | 91精品国产亚洲爽啪在线影院 | 国产精品色拉拉免费看 | 精品99在线观看 | 国产亚洲精品自在线亚洲情侣 | 成人毛片高清视频观看 | 色综合图片 | 欧美一级鲁丝片免费看 | 99re8在线精品视频免费播放 | 国产大片51精品免费观看 | 微拍秒拍99福利精品小视频 | 日本不卡一区二区三区在线观看 | 互换娇妻爽文100系列小说 | 精品亚洲视频在线观看 | 无码精品一区二区三区免费视频 | 天天澡夜夜澡狠狠澡 | 2021国产精品露脸在线 | 教室里老师好紧h | 国产极品美女在线 | 亚洲精品国产专区91在线 | 国产免费久久精品44 |