猿问
请问如何优雅地停止java线程?
如何优雅地停止java线程?
我写了一个线程,它需要太多的时间来执行,而且它似乎还没有完全完成。我想优雅地阻止这条线。有什么帮助吗?
牧羊人nacy
浏览 313
回答 3
3回答
FFIVE
使用标志停止线程的坏处在于,如果线程正在等待或处于休眠状态,则必须等待它完成等待/休眠。如果您调用线程上的中断方法,那么这将导致等待或睡眠调用与InterruptedException一起退出。(标志方法的第二个缺点是,大多数非平凡的代码都将使用java.util.current这样的库,其中的类是专门设计用来使用中断来取消的。在传递给Executir的任务中使用手摇标志将很尴尬。)调用中断()还设置一个中断属性,您可以使用该属性作为标志来检查是否退出(在线程没有等待或休眠的情况下)。您可以编写线程的Run方法,以便在线程正在执行的循环逻辑之外捕获InterruptedException,或者在循环中捕获异常并接近抛出异常的调用,为InterruptedException在CATCH块中设置中断标志,这样线程就不会忘记它被中断的事实。中断的线程仍然可以根据自己的条件保持控制和完成处理。假设我想编写一个确实以增量方式工作的工作线程,其中由于某种原因在中间有睡眠,而且我不希望放弃睡眠以使处理退出而不为该增量执行剩余的工作,我只希望它在增量之间的情况下退出:class MyThread extends Thread{ public void run() { while (!Thread.currentThread().isInterrupted()) { doFirstPartOfIncrement(); try { Thread.sleep(10000L); } catch (InterruptedException e) { // restore interrupt flag Thread.currentThread().interrupt(); } doSecondPartOfIncrement(); } }}下面是一个类似问题的答案,包括示例代码。
0
0
0
墨色风雨
你不应该杀其他人的线。这被认为是相当坏的习惯。然而,有许多方法。你可以用return线程的语句run方法。或者,您可以检查线程是否已经被中断,然后它将取消它的工作。F.E.:while (!isInterrupted()) { // doStuff}
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答