gpt4 book ai didi

Java等到线程(Threadpool)完成他们的工作并开始另一个工作

转载 作者:搜寻专家 更新时间:2023-11-01 02:16:28 25 4
gpt4 key购买 nike

所以我创建了 5 个线程,在它们的工作完成后我想做另一项工作。那么如何找出执行程序的线程何时完成工作,然后才启动 superwork 方法?

主要:

 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();
}

最佳答案

您可以使用ExecutorService.invokeAll():

ExecutorService executor = Executors.newFixedThreadPool(5);

List<Callable<Object>> tasks = new ArrayList<Callable<Object>>();
for(int i=0;i<5;i++){
tasks.add(Executors.callable(new getLogFile(doneSignal, i)));
}

executor.invokeAll(tasks);
// Here tasks are completed

关于Java等到线程(Threadpool)完成他们的工作并开始另一个工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5473791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com