有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