0

所以说我有 10 件事情要运行,但我一次只能运行 3 个线程。

ArrayList<NewThread> threads = new ArrayList<NewThread>();

for(int i = 1; i < args.length; i++) {
   NewThread t = new NewThread(args[i]);
   threads.add(newThread);

   if( (i%3) == 0) {
      for (NewThread nt : threads) {
         nt.join();
      }
      threads.clear();
   }
}

NewThreads 类实现了 Runnable。我认为 join() 方法可以让它等待线程完成,然后再次循环并启动下一批线程,但是我得到了堆栈溢出异常。我认为我执行 join() 不正确,但我不确定该怎么做。我目前正在这样做

public void join() {
   this.join();
}

在我的 NewThread 类中。关于如何让这个工作或更好的方法去做的任何建议?

4

2 回答 2

5

您正在实施或覆盖连接以无休止地调用自己

public void join() {
   this.join(); // call myself until I blow up.
}

最简单的解决方案是使用已经存在的 Thread.join(),但更好的解决方案是使用固定大小的线程池,这样您就不必启动和停止线程,这会浪费大量时间和代码。

您可以使用 ExecutorService

ExecutorService es = Executors.newFixedThreadPool(3);
for(int i=0;i<10;i++)
    es.submit(new Task(i));
于 2013-04-24T20:24:48.047 回答
2

这只是一个简单的错误。

删除方法

    public void join() {
      this.join();
    }

这个方法一次又一次地调用自己。NewThread 应该扩展 Thread。

或第二种方式:

保留方法并调用

     Thread.currentThread.join();

其余的看起来不错。

于 2013-04-24T20:29:15.843 回答