我真的需要这个网站上善良巫师的帮助。我在execute()
的{{1}}创建了一份工作。这项工作有一个进度监控器,一切正常,直到我试图中止这项工作。
当用户点击取消按钮时,进度监视器屏幕会熄灭,但作业中启动的线程将继续在后台运行。在作业上调用AbstractHandler
不会停止子线程。调用cancel()
也没有任何作用。
interrupt()
答案 0 :(得分:2)
你需要“不可阻挡的线索”来合作;它需要定期检查自己的中断标志,并在它变为真时停止。然后在“取消”代码中,调用unstoppableThread.interrupt()
,它实际上会有效。
换句话说,不可阻挡线程的run()
方法需要看起来像
public void run() {
while (!Thread.interrupted()) {
// Do a little work
}
}