繁体   English   中英

为什么Java程序不终止

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM