condition
將object
監視器方法(wait
、notify
和notifyall
)分解成截然不同的物件,以便通過將這些物件與任意lock
實現組合使用,為每個物件提供多個等待 set(wait-set)。其中,lock
替代了synchronized
方法和語句的使用,condition
替代了 object 監視器方法的使用。
條件(也稱為條件佇列 或條件變數)為執行緒提供了乙個含義,以便在某個狀態條件現在可能為 true 的另乙個執行緒通知它之前,一直掛起該執行緒(即讓其「等待」)。因為訪問此共享狀態資訊發生在不同的執行緒中,所以它必須受保護,因此要將某種形式的鎖與該條件相關聯。等待提供乙個條件的主要屬性是:以原子方式 釋放相關的鎖,並掛起當前執行緒,就像object.wait
做的那樣。
condition
例項實質上被繫結到乙個鎖上。要為特定lock
例項獲得condition
例項,請使用其newcondition()
方法。
三個執行緒依次答應abc,**示例如下:
class business
catch (interruptedexception e)
}system.out.println(thread.currentthread().getname() + " 正在列印a");
type = "b";
conditionb.signal();
} finally
}public void b()
catch (interruptedexception e)
}system.out.println(thread.currentthread().getname() + " 正在列印b");
type = "c";
conditionc.signal();
} finally
}public void c()
catch (interruptedexception e)
}system.out.println(thread.currentthread().getname() + " 正在列印c");
type = "a";
conditiona.signal();
} finally}}
Java多執行緒學習筆記
程序與執行緒 1.程序 執行中的程式 乙個程序至少包含乙個執行緒 2.執行緒 程序中負責程式執行的執行單元 執行緒本身依靠程式進行執行 執行緒是程式中的順序控制流,只能使用分配給程式的資源和環境 3.單執行緒 程式中只存在乙個執行緒,實際上主方法就是乙個主線程 4.多執行緒 在乙個程式中執行多個任務...
java多執行緒學習筆記
1 執行緒是乙個程式內部不同的執行路徑 2 生成執行緒只要能使用介面就不要繼承,繼承後就不能繼承其他的類,比較死。而且繼承的run方法不能丟擲與父類不同的異常。比如sleep的intterruptedexception 3 start方法只是說我準備好了,進入就緒狀態了,等待排程後才進入執行狀態 4...
java多執行緒學習 四
本篇介紹synchronized 非this物件x 方式的同步,x一般是引數或者例項變數 package chapter2.synblockstring3 演示不同執行緒持有不同的物件監視器,呼叫是非同步的 ta的物件監視器是anystring,而b的物件監視器是類例項物件 a begin b be...