我有以下情形: 多个事件来自源,每个都有不同的类型。我需要按顺序对同一类型的每个事件进行一些操作,如果是其他类型,则需要并行操作。含义:线程没有通知通知
从源活动: A1,A2,B1,A3,B2,C1
- 监听器A,必须排队A1,A2和A3,并且在 顺序与他们的工作,以单个线程
- 监听乙A相同,并行地,在不同的线程
- 监听器C与B相同,并行地,在不同的线程
我在做什么来实现吨他?一般来说,我有一个监视器,每种类型的事件,我用一个新的线程初始化,然后调用wait()。每个监视器都有一个队列。
Monitor.java(实现可运行)
public void run(){
while(!killed){
synchronize(this){
while(this.stopped){
wait(); //it waits here when initialized, waiting for the first event
}
while(eventQueue.size() > 0){
//do something with the event
}
//i set the flag stopped = true again to wait for the next event
this.stopped = true;
}
}
}
当一个事件到达时,我将其添加到队列中,然后通知()显示器以它打破了,同时
public void awake(Event event){
synchronize(this){
eventQueue.add(event);
this.stopped = false;
notify();
}
}
的“杀死”标志用于维持线程活着直到满足某些标准。然后,我将死亡标志设置为true,并通知监视器结束线程。
我的问题是当我运行一组事件,有时线程不会唤醒notify()。有时10个事件中有10个会被处理,有时候会是10个事件中的8个,依此类推。
我一直在寻找通过并行api寻找一些替代我的问题,但我找不到任何好的。你们能否就我如何应对这个问题给我任何建议?
我希望我能很好地解释我的问题。如果没有,请询问。
在此先感谢。
供参考:this.stopped需要是volatile,因为它被多个线程使用。 – Gray
'notify()'或'notifyAll()'? – Raedwald