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

标签 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();

最佳答案

只需通过按钮取消任务,然后检查取消情况。如果您仅检查任务何时完成“无论它正在做什么”,它都会在取消之前完成该任务。例如:

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());

关于java - 让任务在用户取消之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969588/

相关文章:

java - 如何处理使用 Web Driver 动态生成值的表?

c - Unix - 将文件中的一行写入 char* var,然后将其保存为整数

multithreading - 如何在多线程环境下正确使用redis和servicestack?

java - 使用队列的生产者/消费者线程

android - 我不知道如何停止我的服务

javascript - 变量捕获按钮并将其传递给 Angular 服务

java - 这个 Eclipse View 是如何制作的?

java - 数据包,当通过我的 SSL 套接字发送时变得非常大

linux - 如何知道应用程序的服务名称?

java - 类必须声明为抽象或实现抽象方法 : Intellij error?