Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FutureTask保持活动状态_Java_Executorservice - Fatal编程技术网

Java FutureTask保持活动状态

Java FutureTask保持活动状态,java,executorservice,Java,Executorservice,这是一个非常简单的代码: FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>(){ @Override public Integer call() throws Exception { int i =0; while

这是一个非常简单的代码:

FutureTask<Integer> task = new FutureTask<>(new
            Callable<Integer>(){
                @Override
                public Integer call() throws Exception {
                    int i =0;
                    while(i<10){
                        i++;
                    }

                    return 0;
                }

    });
我将“一切正常”输入控制台,以便任务正确执行并返回。 然而,线程仍然存在!我可以通过在eclipse中执行它来查看它:标记正在执行的程序的红方块仍然处于活动状态。 但我的主页在打印“一切正常”后关闭,所以它一定是那个任务。 为什么它不关闭?我怎样才能关上它


我看到了一些ExecutorService类的示例,它有一个shutdown方法,但我不想关闭整个线程池,因为我仍然需要它处于活动状态以接受其他任务,我只想关闭该任务

Executors.newCachedThreadPool()的文档说明它“创建一个线程池,根据需要创建新线程,但在可用时将重用以前构造的线程…60秒未使用的线程将被终止并从缓存中删除。”

你等了60秒了吗

    Executor executor = Executors.newCachedThreadPool();
    executor.execute(task);
    try {
        task.get(3000, TimeUnit.MILLISECONDS);
        System.out.println("Everything was ok");
    } catch (InterruptedException | ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException ex){
        boolean result = task.cancel(true); 
        System.out.println("the task has timed out "+result);
    }