JavaFX Task vs plain old Thread,有什么区别?

pup*_*eno 8 java multithreading javafx task

除了知道任务状态和回调(已完成,失败等)的属性之外,在具有lambda的普通旧Java线程上使用JavaFX Task还有其他区别吗?

我不是在问什么是好或坏,我不是在问你认为我应该做什么,我要求在使用Task而不是普通的lambda来运行后台线程时会发生客观的事实差异. JavaFX应用程序.除了我已经提到的差异.

关于Oracel的并发教程,在标题为"为什么使用javafx.concurrent包?"的部分中.它说:

如果您对代码有特殊要求或需要额外的权力,那么通过创建Runnable对象和新线程来实现后台工作程序是一种合适的方法.

除此之外,使用a的所有原因Task同样适用于a Runnable,我看不出有什么特殊要求或额外的力量,我也看不到你输了什么,除了状态和回调,当选择Runnable结束Task.我所看到的是使用Task更冗长:

new Thread(this::doSomething).start();
Run Code Online (Sandbox Code Playgroud)

VS

new Thread(new Task<Void>() {
    @Override
    protected Void call() throws Exception {
        doSomething();
        return null;
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

我担心的是,根据Oracle选择更简洁的代码版本会产生一些意想不到的副作用,只能在特殊情况下使用.

doSomething在这个例子中有各种不同的活动,我对与他们所做的事情无关的事实感兴趣.在我的例子中,主要是网络请求然后使用更新UI Platoform.runLater.