在用户取消任务之前让任务完成

时间:2016-05-01 17:21:24

标签: java multithreading service javafx task

假设我有一个看起来像这样的任务,我想让它一直运行直到用户按下按钮。但是当按下按钮时,我不希望线程立即爆发。我希望它在返回之前完成它正在做的任何事情。我怎样才能做到这一点?

task = new Service(){
    @Override
    protected Task createTask() {
        System.out.println("Task created");
        return new Task<Void>() {
            @Override
            protected Void call() throws Exception {

                while(true) {
                // Do stuff her

                }
                return null;
            }
        };
    }
};

...
...
task.start();

1 个答案:

答案 0 :(得分:3)

只需从按钮取消任务,然后检查取消。如果您只检查任务何时完成&#34;无论它在做什么&#34;,它将在取消之前完成。例如:

task = new Service(){
    @Override
    protected Task createTask() {
        System.out.println("Task created");
        return new Task<Void>() {
            @Override
            protected Void call() throws Exception {

                while(!isCancelled()) {
                    // Do stuff here

                }
                return null;
            }
        };
    }
};

Button cancelButton = new Button("Cancel");
cancelButton.setOnAction(e -> task.cancel());