产生更多线程

时间:2012-04-20 16:19:05

标签: java

我开发了一个程序,其中线程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正在等待,请指教。

2 个答案:

答案 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类。