有n個線程可以訪問的單例類。
每個線程加載此類的實例並在一個循環中從此類調用一個方法。執行線程「one by one」
我必須控制執行的流程,以便每個線程都可以調用方法一和暫停,只有在所有線程調用該方法後才能恢復工作。線程可以按任意順序調用方法,只需要在移動循環之前執行一次方法。
這是我嘗試做:
在螺紋:
while (some condition){
ObjectType obj = theSingleton.getInstance().getSharedObject();
obj.SomeMethod(threadID);
if (obj.waitisneeded())
synchronized (obj) {
obj.wait();
}
}
我在的someMethod做:
public synchronized void SomeMethod(String threadID) {
hashMap.put(threadID,true);
some job here
}
和waitisneeded:
public synchronized boolean waitisneeded(){
{
Iterator iter = hashMap.entrySet().iterator();
boolean alldone = false;
while (iter.hasNext()) {
Map.Entry me = (Map.Entry) iter.next();
String key = me.getKey().toString();
alldone = (Boolean)me.getValue();
if(!alldone) {
return false;
}
}
//set all values to false
iter = hashMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry me = (Map.Entry) iter.next();
String key = me.getKey().toString();
me.setValue(false);
}
this.notifyAll();
return true;
運行這讓我感到意外編輯結果和死鎖。
我該如何解決?
注意:我無法改變線程的創建方式,我只能改變這些方法! (加在線程那裏等待是while循環)
待辦事項你知道每個調用'obj.SomeMethod()'之前創建了多少個線程? – 2011-12-18 22:21:31
你怎麼知道什麼時候「所有期望的線程現在稱爲單例」的時間點已經達到? – 2011-12-18 22:30:25
@TheScrumMeister Scrum Meister是的,我知道線程數 – kenny 2011-12-19 05:11:52