【发布时间】:2016-10-13 19:51:21
【问题描述】:
现在我有一个 JavaFx 程序,它使用线程内的 JavaFx 任务作为后台进程。
Task<Void> task = new Task<Void>( ){
@Override
protected Void call() throws Exception {
while(running){
doSomething();
}
saveData();
return null;
}
};
Thread th = new Thread(task);
th.start();
我想尽可能顺利地停止这个过程(这意味着我想通过设置 running = false; 来停止这个过程,因此尽可能调用 save() 方法。同时我想确保JavaFx 进程(窗口)关闭后后台进程没有机会继续运行。
目前我将 Thread 设置为 Deamon,以确保在 JavaFx 进程死后进程也死掉(这两个进程是唯一运行的进程)
th.setDeamon(true);
同时我在我唯一的 Stage 中添加了一个 CloseRequestListener
stage.setOnCloseRequest( e -> running = false);
现在我的问题:
由于进程是一个守护进程,它可以在运行过程中被移除。有没有更好的方法来确保后台任务在 JavaFx 进程死亡后终止? (即使JavaFx进程被强行杀死)
或者有没有办法顺利杀死一个守护线程?
编辑:我的主要优先事项是后台线程不能为自己而活。而第二个优先级是尽可能顺利地杀死后台线程。
【问题讨论】:
标签: java multithreading javafx