1

我开发了一个程序,其中线程 A 等待线程 B 完成它的任务,当线程 B 完成它的任务时,它使 notfiy() 到线程 A 继续前进..下面是代码..

    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 正在等待一样,请告知。

4

2 回答 2

1

使用ExecutorService它有一个方法invokeAll()。你可以提交你所有的 ThreadB 并持有一个未来的列表。

于 2012-04-20T18:23:12.760 回答
0

您当前的代码实际上包含可能的死锁,因为您start()首先是 threadB 并且它notify()在其run(). 这notify()可以wait()在 main 之前调用。如果发生这种情况,您的 threadB 将永远等待。

要启动更多 ThreadB,您只需要创建更多实例。

ThreadB threadBs = new ThreadB[3];
for (ThreadB b : threadBs) {
    b = new ThreadB();
    b.start();
}

但是,我会建议实现 Runnable 接口,而不是仅仅扩展 Thread 类。

于 2012-04-20T16:29:11.060 回答