除了知道任务状态和回调(已完成,失败等)的属性之外,在具有lambda的普通旧Java线程上使用JavaFX Task还有其他区别吗?
我不是在问什么是好或坏,我不是在问你认为我应该做什么,我要求在使用Task而不是普通的lambda运行背景时会发生客观的事实差异JavaFX应用程序中的线程。除了我已经提到的差异。
关于Oracel的并发教程,在标题为“为什么使用javafx.concurrent包?”的部分中。它说:
如果您对代码有特殊要求或需要额外的权力,那么通过创建Runnable对象和新线程来实现后台工作程序是一种合适的方法。
除此之外,使用Task
的所有原因同样适用于Runnable
而且我看不出有什么特殊要求或额外的力量,我也看不出是什么在选择Runnable
而不是Task
时,除了状态和回调之外,你会失败。我所看到的是使用Task
更加冗长:
new Thread(this::doSomething).start();
vs
new Thread(new Task<Void>() {
@Override
protected Void call() throws Exception {
doSomething();
return null;
}
}).start();
我担心的是,根据Oracle选择更简洁的代码版本会产生一些意想不到的副作用,只能在特殊情况下使用。
doSomething
在这个例子中有各种不同的活动,我对与他们所做的事情无关的事实感兴趣。在我的情况下,主要是网络请求,然后使用Platoform.runLater
更新UI。