AbstractQueuedSynchronizer筆記
Node的幾個狀態描述
volatile int waitStatus;
// 表示執行緒已取消
static final int CANCELLED = 1;
// 後繼者的執行緒需要喚起
static final int SIGNAL = -1;
// 執行緒在等待條件
static final int CONDITION = -2;
// 下一個acquireShared應無條件傳播
static final int PROPAGATE = -3;
SIGNAL:此節點的後繼者(或將很快)被阻止(通過駐留),因此當前節點在釋放或取消時必須取消其後繼節點。為了避免競爭,獲取方法必須首先指示它們需要訊號,然後重試原子獲取,然後在失敗時阻止。
CANCELED:由於超時或中斷,此節點被取消。節點永遠不會離開這種狀態。特別是,具有已取消節點的執行緒永遠不會再次阻塞。
CONDITION :此節點當前處於條件佇列中。在傳輸之前,它不會用作同步佇列節點,此時狀態將設定為0.(此處使用此值與欄位的其他用法無關,但可簡化機制。)
PROPAGATE:releaseShared應該傳播到其他節點。在doReleaseShared中設定(僅限頭節點)以確保繼續傳播,即使其他操作已經介入。
0:以上都不是
這些值以數字方式排列以簡化使用。非負值意味著節點不需要發訊號。因此,大多數程式碼不需要檢查特定值,僅用於符號。
對於正常的同步節點,該欄位初始化為0,對於條件節點,該欄位初始化為CONDITION。它使用CAS(或者在可能的情況下,無條件的易失性寫入)進行修改。
相關文章
- AbstractQueuedSynchronizer原理剖析
- AbstractQueuedSynchronizer ConditionObject解析Object
- AbstractQueuedSynchronizer原始碼解析原始碼
- AbstractQueuedSynchronizer(AQS)深入剖析AQS
- AbstractQueuedSynchronizer原始碼分析原始碼
- 【JDK1.8】JUC——AbstractQueuedSynchronizerJDK
- 深入理解AbstractQueuedSynchronizer(AQS)AQS
- AbstractQueuedSynchronizer(AQS)原始碼解析AQS原始碼
- AbstractQueuedSynchronizer部分原始碼解析原始碼
- 同步器AbstractQueuedSynchronizer淺析
- 初識Lock與AbstractQueuedSynchronizer(AQS)AQS
- java併發神器 AQS(AbstractQueuedSynchronizer)JavaAQS
- AbstractQueuedSynchronizer 佇列同步器(AQS)佇列AQS
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(3)JDK原始碼
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(2)JDK原始碼
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(1)JDK原始碼
- Java併發——AbstractQueuedSynchronizer(AQS)同步器JavaAQS
- 從ReentrantLock看AQS (AbstractQueuedSynchronizer) 執行流程ReentrantLockAQS
- 印象筆記 --- 方法分享筆記筆記
- 原始碼分析:同步基礎框架——AbstractQueuedSynchronizer(AQS)原始碼框架AQS
- 筆記筆記
- 怎麼利用AbstractQueuedSynchronizer實現自定義同步元件?元件
- docker 筆記Docker筆記
- hybrid筆記筆記
- Meteor筆記筆記
- String筆記筆記
- html 筆記HTML筆記
- kafka 筆記Kafka筆記
- 路由筆記路由筆記
- 筆記1筆記
- 筆記-FMDB筆記
- ES筆記筆記
- 筆記:Docker筆記Docker
- Liunx筆記筆記
- webSocket筆記Web筆記
- Shadowsocks 筆記筆記
- 筆記:Spring筆記Spring
- jQuery筆記jQuery筆記