【发布时间】:2014-03-21 11:06:14
【问题描述】:
下面的代码从Java Concurrency 框架检查ExecutorCompletionService 的使用情况(使用的IDE 是Netbeans)。
但是程序并没有终止。为什么?
代码:
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Executors;
public class TestFuture {
public static void main(String... args) throws InterruptedException, ExecutionException {
Executor ex = Executors.newCachedThreadPool();
CompletionService<Long> cs = new ExecutorCompletionService<Long>(ex);
cs.submit(new Worker());
cs.submit(new Worker());
cs.submit(new Worker());
for (int i = 0; i < 3; i++) {
long l = cs.take().get();
//utilize the result
System.out.println(l);
}
}
}
class Worker implements Callable {
@Override
public Long call() throws Exception {
//do some task and return back
return System.currentTimeMillis();
}
}
【问题讨论】:
-
您需要暂停(关闭)线程池,或者将线程指定为守护进程。
-
使用
ExecutorService#shutdown()
标签: java concurrency future executors