国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

AbstractQueuedSynchronizer(AQS)

Keagan / 1525人閱讀

摘要:線程將再次嘗試獲取鎖定以確保它在實際停放之前無法獲取。如果沒有頭,則表示隊列中沒有線程,因此沒有人發出信號。如果后繼節點未處于取消狀態,則取消后繼節點的線程,以便它可以重試獲取。

摘要排隊同步器類
它提供了一個框架,用于實現阻塞鎖和相關的同步器,如信號量, CountDownLatch等。獲取的基本算法是try acquire,如果成功則返回其他排隊線程(如果它尚未排隊)并阻止當前線程。同樣,發布的基本算法是try release,如果成功,則取消阻塞隊列中的第一個線程,否則只返回。線程將在先進先出(FIFO)等待隊列中等待。抽象方法 tryAcquire()和tryRelease()將根據需要由子類實現。

以獨家模式獲取
以獨占模式獲取的通用算法
AbstractQueuedSynchronizer(AQS)

在上面的圖中"shouldParkAfterFailedAcquire?" 驗證前任的等待狀態是否為SIGNAL。如果是,它確定前任線程將在其釋放時SIGNAL,因此它將立即阻止,否則它可能會重試獲取鎖,以防它是隊列中的第一個節點。
AbstractQueuedSynchronizer(AQS)

隊列
如果線程無法獲取鎖,它將被放入隊列中。如果隊列尚不存在,它將使用虛擬標頭初始化它,然后將其自身鏈接到它。頭部的“下一個”和節點的“上一個”將被鏈接。新節點也成了尾巴。標題節點的等待狀態將設置為SIGNAL,以便當所有者線程釋放鎖時,它可以通知頭節點的后繼者獲取鎖。線程將再次嘗試獲取鎖定以確保它在實際停放之前無法獲取。

AbstractQueuedSynchronizer(AQS)

因此,只要其前任節點的等待狀態被設置為SIGNAL,就可以安全地停放未能獲得鎖的線程,因此一旦前一個被釋放,它就可以重試獲取鎖。
如果前一個被取消,它將跳過所有被取消的前任,以重置其等待線程的next和prev指針。

AbstractQueuedSynchronizer(AQS)
發布
AbstractQueuedSynchronizer(AQS)

子類將根據他們的要求實現“try Release”。一旦發布,標頭節點的后繼節點需要發信號,以便它可以重新嘗試獲取。如果沒有頭,則表示隊列中沒有線程,因此沒有人發出信號。如果磁頭存在,則確保等待狀態不為零。如果它為零,則意味著不需要發信號通知后繼節點。

Unpark后繼節點的線程
線程到unpark是在后繼節點,通常只是下一個節點。
情況1:如果頭部的等待狀態<0,則清除等待狀態。如果后繼節點(P1)未處于取消狀態,則取消后繼節點的線程,以便它可以重試獲取。
AbstractQueuedSynchronizer(AQS)

情況2:如果后繼節點取消或為null,則從尾部向后遍歷以查找實際未取消的后繼節點。
AbstractQueuedSynchronizer(AQS)

一旦取消停放線程,其節點就成了新頭。老頭將脫鉤。如果未能獲得,將重新停放。頭節點的等待狀態設置為0將重置為SIGNAL。

發布共享
這與獨家發布類似。它還確保釋放傳播。

以共享模式獲取
這類似于獨家收購。它還將釋放傳播到隊列中等待獲取共享鎖的其他等待線程。一旦鎖定被釋放,它就會取消其后繼節點的停放,后者又將釋放傳播到下一個節點。

取消
在嘗試獲取時可能存在運行時異常,在這種情況下將取消上下文中的節點。如果節點被取消,我們必須確保其后繼節點正確鏈接到有效的前任節點,因此可能必須調整鏈接。如果其前任節點已經處于取消狀態,則將跳過這些節點以到達具有等待狀態<= 0的適當的前任節點。
如果要取消的節點本身是尾節點,則將簡單地將其移除。它的前身節點將成為新的尾巴。新尾部的“下一個”鏈接將指向null。
如果等待狀態<0,則表示后繼者需要信號,嘗試設置前任的下一個鏈接,以便獲得一個。如果前任是頭節點本身,則它將喚醒其后繼節點。

情況1:要取消的節點是尾節點
AbstractQueuedSynchronizer(AQS)

情況2:取消節點的前任是head,現在將發信號通知被取消節點的下一個節點被喚醒。
原文地址:https://www.javarticles.com/2...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75352.html

相關文章

  • AbstractQueuedSynchronizerAQS

    摘要:線程將再次嘗試獲取鎖定以確保它在實際停放之前無法獲取。如果沒有頭,則表示隊列中沒有線程,因此沒有人發出信號。如果后繼節點未處于取消狀態,則取消后繼節點的線程,以便它可以重試獲取。 摘要排隊同步器類它提供了一個框架,用于實現阻塞鎖和相關的同步器,如信號量, CountDownLatch等。獲取的基本算法是try acquire,如果成功則返回其他排隊線程(如果它尚未排隊)并阻止當前線...

    Coding01 評論0 收藏0
  • 讀源碼筆記 Java AbstractQueuedSynchronizer

    摘要:總結總的來說,操作順序是進入隊列喚醒,成功獲得鎖將狀態變為并將其從轉到使再次獲得鎖執行余下代碼。當然這是理由狀態下,為了討論及的原理,實際的操作時序也有可能變化。 AQS Condition 最近面試被問到java concurrent包下有哪些熟悉的,用過的工具。因此來回顧一下,這些工具的底層實現,AbstractQueuedSynchronizer。在網上看到了其他人的一些技術博客...

    selfimpr 評論0 收藏0
  • 讀源碼筆記 Java AbstractQueuedSynchronizer

    摘要:總結總的來說,操作順序是進入隊列喚醒,成功獲得鎖將狀態變為并將其從轉到使再次獲得鎖執行余下代碼。當然這是理由狀態下,為了討論及的原理,實際的操作時序也有可能變化。 AQS Condition 最近面試被問到java concurrent包下有哪些熟悉的,用過的工具。因此來回顧一下,這些工具的底層實現,AbstractQueuedSynchronizer。在網上看到了其他人的一些技術博客...

    YuboonaZhang 評論0 收藏0
  • AbstractQueuedSynchronizer超詳細原理解析

    摘要:如果此時,鎖被釋放,需要通知等待線程再次嘗試獲取鎖,公平鎖會讓最先進入隊列的線程獲得鎖。等待隊列節點的操作由于進入阻塞狀態的操作會降低執行效率,所以,會盡力避免試圖獲取獨占性變量的線程進入阻塞狀態。 ?今天我們來研究學習一下AbstractQueuedSynchronizer類的相關原理,java.util.concurrent包中很多類都依賴于這個類所提供隊列式同步器,比如說常用的R...

    yck 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<