一玖像、關系
同步隊列節(jié)點來源:
1樱溉、同步隊列依賴一個雙向鏈表來完成同步狀態(tài)的管理挣输,當前線程獲取同步狀態(tài)失敗 后,同步器會將線程構建成一個節(jié)點饺窿,并將其加入同步隊列中歧焦。
2、通過signal
或signalAll
將條件隊列中的節(jié)點轉移到同步隊列肚医。(由條件隊列轉化為同步隊列)
這里寫圖片描述
條件隊列節(jié)點來源:
1绢馍、調用await
方法阻塞線程;
2肠套、當前線程存在于同步隊列的頭結點舰涌,調用await
方法進行阻塞(從同步隊列轉化到條件隊列)
可總結為:
1、同步隊列與條件隊列節(jié)點可相互轉化
2你稚、一個線程只能存在于兩個隊列中的一個
二瓷耙、實例說明
1、假設初始狀態(tài)如下刁赖,節(jié)點A搁痛、節(jié)點B在同步隊列中。
這里寫圖片描述
2宇弛、節(jié)點A的線程獲取鎖權限鸡典,此時調用await
方法。節(jié)點A從同步隊列移除枪芒, 并加入條件隊列中彻况。
這里寫圖片描述
3、調用 signal
方法舅踪,從條件隊列中取出第一個節(jié)點纽甘,并加入同步隊列中,等待獲取資源
這里寫圖片描述
本文圖片來源:
http://javadoop.com/post/AbstractQueuedSynchronizer-2
http://blog.csdn.net/tb3039450/article/details/69056169