繁体   English   中英

Java任务什么都不做?

[英]Java task does nothing?

我有一个程序,在其中我使用了ExecutorService控制的多个任务。 我实际上使用了Runnable ,现在将其更改为任务,但是我似乎做错了一些事情,因为应该在我的任务中发生的所有事情都没有发生。 我应该提到,该程序没有完成,它会无限运行。 有人可以告诉我我想念什么吗?

public class Test{
    ExecutorService exec;

    public Test (){
        exec = Executors.newCachedThreadPool();
        run();
    }

    public static void main(String[] args) {
        Test test = new Test();
    }

    private void run() {
        System.out.println("This works normal");
        Task<Void> task = new Task<Void>() {
            @Override
            protected Void call(){
                System.out.println("Here nothing happens already");
                for (int i = 0; i < 10; i++)
                    exec.submit(() -> { System.out.println("Offcourse no sub-task works either"); });
                return null;
            }
        };
        exec.submit(task);
    }
}

这些是我的进口:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javafx.concurrent.Task;

我用:
-Netbeans IDE 8.2
-Java
-Windows 10专业版

作为一项不寻常的功能, Task (属于javafx包的一部分)同时实现CallableRunnable 当您将Task提交给ExecutorService它将调用Task.run方法,该方法在Task具有空的, Task.run实现。 如果您在匿名类中覆盖run ,那么您将看到代码运行。

您是否考虑过直接从Callable创建一个匿名类? 还是因为使用JavaFX而有意使用Task类?

如果您正在使用JavaFX并有意使用Task ,那么Task API建议以下内容:

尽管ExecutorService定义了几种采用Runnable的方法,但通常应限制自己使用从Executor继承的execute方法。

任务API

call方法通常用于您使用服务时

要关闭ExecutorService ,您应调用exec.shutdown()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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