我开发了一个程序,其中线程A等待线程B完成它的任务,当线程B完成它的任务时,它使得线程A的notfiy()继续向前......下面是代码..
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b) {
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + b.totals);
}
}
}
class ThreadB extends Thread {
public int totals;
public void run() {
synchronized(this) { //instance level lock
for(int i=0;i<100;i++) {
totals += i;
}
notify();
}
}
}
现在我想让我们说3个线程正在等待线程b,所以请告诉我如何产生3个线程,就像线程A正在等待,请指教。
答案 0 :(得分:1)
使用ExecutorService它有一个方法invokeAll()。您可以提交所有ThreadB并持有未来列表。
答案 1 :(得分:0)
您的当前代码实际上包含可能的死锁,因为您首先start()
了threadB并且正在调用notify()
中的run()
。可以在主notify()
之前调用此wait()
。如果发生这种情况,你的threadB将永远等待。
要启动更多ThreadB,您只需创建更多实例。
ThreadB threadBs = new ThreadB[3];
for (ThreadB b : threadBs) {
b = new ThreadB();
b.start();
}
但是,我建议实现Runnable接口,而不是仅扩展Thread类。