[英]Why Java program not terminating
下面的代碼檢查Java Concurrency
框架(使用的IDE是Netbeans)中ExecutorCompletionService
的使用情況。
但是程序不會終止。 為什么?
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();
}
}
main
完成后,線程池中的線程將繼續運行。 這就是為什么JVM不會關閉的原因。 您需要使用守護程序線程,或顯式關閉池。
這是一個例子:
ExecutorService ex = Executors.newCachedThreadPool();
// do all your submission work here
ex.shutdown();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.