4
因此,我创建可以说5个线程,并且在他们的工作完成后,我想要做另一项工作。那么如何找出执行程序的线程什么时候完成他们的工作,然后才开始超级工作方法?Java等待线程(Threadpool)完成他们的工作并开始另一项工作
主营:
ExecutorService executor = Executors.newFixedThreadPool(5);
CountDownLatch doneSignal = new CountDownLatch(5);//thread number
for(int i=0;i<5;i++){
getLogFile n = new getLogFile(doneSignal, i);// work method
executor.execute(n);
doneSignal.await();
}
//这里大概像executor.awaitTermination(60 TimeUnit.SECONDS); {不起作用}或一些作品
Superworkmethod(uses thread created files);//main thread probably starts thi
类:
public static class getLogFile implements Runnable {
private final CountDownLatch doneSignal;
private final int i;
getLogFile(CountDownLatch doneSignal, int i) {
this.doneSignal = doneSignal;
this.i = i;
}
public int run1(String Filenamet) {
//do work
}
public void run() {
run1(file);
doneSignal.countDown();
}
}
作用:tasks.add(Executors.callable(新getLogFile(doneSignal,I));一次执行每个线程或同时执行所有线程? ,因为正在使用的j2ssh连接正在执行一项任务/在时间发送一个命令给服务器 – user615927 2011-03-30 10:58:00
@ user615927:'invokeAll()'同时执行任务。如果你想要执行它们,为什么你需要线程池呢? – axtavt 2011-03-30 11:16:33
我想我想让事情变得比它本该更复杂(高水平的东西 - >工作更快),以同样的方式结束),也认为使用它会提高性能(许多小任务在同一时间单独执行 - >速度)...无论如何,也许你知道如何停止主线程,直到其他线程完成他们的工作? – user615927 2011-03-30 13:44:54