Java多執行緒學習 Condition的使用

2021-06-20 20:16:23 字數 1274 閱讀 5510

conditionobject監視器方法(waitnotifynotifyall)分解成截然不同的物件,以便通過將這些物件與任意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...