所以说我要运行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类中。关于如何使这项工作或更好的方式去做的任何建议?
答案 0 :(得分: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));
答案 1 :(得分:2)
这只是一个简单的错误。
删除方法
public void join() {
this.join();
}
此方法一次又一次地调用自身。 NewThread应该扩展Thread。
或第二种方式:
保留方法并致电
Thread.currentThread.join();
其余的看起来很好。