Java 执行器 : wait for task termination.

标签 java multithreading concurrency executorservice

<分区>

我需要提交一些任务,然后等待它们直到所有结果都可用。它们中的每一个都将一个 String 添加到一个 Vector(默认情况下是同步的)。然后我需要为 Vector 中的每个结果启动一个新任务,但只有当所有以前的任务都停止工作时我才需要这样做。

我想使用 Java Executor,特别是我尝试使用 Executors.newFixedThreadPool(100) 以使用固定数量的线程(我有可变数量的任务,可以是 10 或500) 但我是执行者的新手,我不知道如何等待任务终止。 这类似于我的程序需要执行的伪代码:

ExecutorService e = Executors.newFixedThreadPool(100);
while(true){

/*do something*/

for(...){
<start task>
}

<wait for all task termination>

for each String in result{
<start task>
}

<wait for all task termination>
}

我不能执行 e.shutdown,因为我有一段时间了(真),我需要重用 executorService...

你能帮帮我吗?你能给我推荐一本关于 Java 执行器的指南/书籍吗?

最佳答案

ExecutorService为您提供了一种同时执行多个任务并获得 Future 集合的机制返回对象(代表任务的异步计算)。

Collection<Callable<?>> tasks = new LinkedList<Callable<?>>();
//populate tasks
for (Future<?> f : executorService.invokeAll(tasks)) { //invokeAll() blocks until ALL tasks submitted to executor complete
    f.get(); 
}

如果你有Runnable s 而不是 Callable s,你可以很容易地打开一个Runnable进入Callable<Object>使用方法:

Callable<?> c = Executors.callable(runnable);

关于Java 执行器 : wait for task termination.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322147/

相关文章:

java - start() 方法从 start() 调用线程......令人困惑

c# - 为单独的线程使用不同的 .config 文件 (.NET/C#)

java - 通过java备份和恢复sql server数据库

java - session 感知 : How can I get session attribute from action

java - 如何在 Android 中获取 volley JSONArray

java - 在 Selenium getattribute() 中同时使用文本和位置

c# - 填充数据集异步

c# - 在 .NET 4 中,BeginInvoke 和 Task 是否使用相同的线程池?

Java读写锁需求,不同线程加锁和释放

sql-server - 什么样的SQL-Server锁级别适合insert?