condition原理?
Condition持有多個FIFO的等待隊列,當前線程調用await方法時,那么這當前線程就會釋放鎖,進入這個等待隊列的尾部進入等待狀態。
Condition擁有這個隊列的首節點(firstWaiter)和尾節點(lastWaiter).其實一個Lock(同步器)有一個同步隊列(準備去獲得鎖)以及多個等待隊列(本來已經有鎖,但是中途用了await方法),還記得之前討論的監視器么,和這個很像,監視器只有一個同步隊列和一個等待隊列。
其實工作原理一樣的,沒有獲取鎖的線程在同步隊列等待鎖,獲得鎖后進入特殊的房間(資源),調用await之類的等待方法就把同步隊列的頭結點移到等待隊列的尾節點。當等待隊列里面的節點被喚醒后,進入同步隊列拿鎖進入同步狀態。
下一篇什么是HTTP連接錯誤