任务的非Javafx等价物

时间:2016-08-25 08:38:13

标签: java class javafx

在非JavaFX应用程序中,我希望拥有与Task相同的类。

执行某些操作并能够返回其进度的线程。

是否有可以执行与上述类似的任务?

1 个答案:

答案 0 :(得分:2)

Task类为FutureTask添加了许多功能,但所有非显而易见的部分都与提供 observable 属性并确保它们更新有关在FX应用程序线程上。听起来你不需要任何困难的部分:你正在查询任务以检查它的进度(所以你不需要可观察性,即当进度改变时调用回调)并且你没有FX用于安排更新的应用程序线程。

因此,例如,如果要跟踪进度,只需将适当的属性添加到Callable实施中即可。如果您希望从多个线程访问进度,请使用原子引用在内部表示进度(或至少使其成为volatile):

import java.util.concurrent.Callable ;
import java.util.concurrent.atomic.AtomicLong ;

public class MyCountingTask implements Callable<Void> {

    private AtomicLong progressCount = new AtomicLong();
    private final long max = 1000 ;

    @Override
    public Void call() throws InterruptedException {

        for (int count = 0; count < max ; count++) {

            progressCount.set(count);

            // in real life, do actual work instead of sleeping...
            Thread.sleep(100);
        }

        progressCount.set(max);

        return null ;
    }

    public double getProgress() {
        return 1.0*progressCount.get() / max ;
    }
}