我有一个MainClass,一个Worker类和一个Supervisor类。在MainClass中,我创建了10个Worker类和一个在不同线程中运行的Supervisor类。
class MainClass {
public static void main(String args[]) {
for (int i=0; i<10 ;i++) {
Thread t = new Thread( new Worker());
t.start();
}
(new Thread(new Supervisor()).start();
}
class Worker extends Thread {
public void run() {
while(true) {
if(some_condition) {
//do stuff
} else {
// pause thread execution for undefined time.
}
}
}
}
class Supervisor extends Thread {
public void run() {
while(true) {
if(some_condition) {
// restart Workers thread that are paused.
}
// do other stuff
}
}
}
我不知道如何实现这个,导致每个线程中的条件彼此独立,所以我不需要同步,所以我不能使用wait-notify。
答案 0 :(得分:0)
根据我的理解,您希望根据您的要求创建由10名工作人员或数字组成的单独线程池。
就游泳池而言,您可以在ThreadPoolExecutor
api中查看java.util.concurrent
。内部ThreadPoolexecutor
还为运行任务创建工作线程。
尝试阅读ThreadPoolExecutor
它可能对您有所帮助,或者请详细说明您希望通过此问题实现的最终目标。
答案 1 :(得分:0)
我不知道如何实现这个,导致每个线程中的条件彼此独立,所以我不需要同步,所以我不能使用wait-notify。
当然可以。
这里的细微之处在于,大概Supervisor
实际上并不知道工作线程是否真的暂停了。 (如果确实如此,那么条件不独立。)
由于Supervisor不知道线程是否实际暂停(假设),因此如果它试图取消暂停已经取消暂停的线程,你必须设计你想要发生的事情。
a)取消暂停应该什么都不做?
b)或者是否应该在下次工人试图暂停时立即取消暂停?
如果答案是(b),那么你必须担心线程安全。如果答案是(a),那么你不会(除非你在线程之间传递一些其他数据!)
无论哪种方式,您仍然可以使用等待和通知。