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