Die*_*rDP 5 java multithreading interrupt
我正在开发一个应用程序,在某些时候启动一个工作线程.此线程的行为将根据用于启动它的参数而有很大差异,但以下属性列表适用:
由于可能持续时间很长(5分钟到几个小时,具体取决于输入),我们希望能够中止计算.如果我们选择中止它,我们不再关心输出,并且线程实际上只要它继续运行就浪费宝贵的资源.由于代码在我们的控制之下,建议的方法是使用中断来指示中止.
虽然Web上的大多数示例都涉及循环某些方法的工作线程,但对我来说情况并非如此(此处类似的问题).在这个工作线程中也很少有阻塞调用,在这种情况下,本文建议手动检查中断标志.我的问题是:如何处理这个中断?
我看到了几个选项,但无法确定哪种选择最"干净".尽管我有实际的例子,但我主要对如何处理这个问题的"最佳实践"感兴趣.
ThreadDeath了已弃用的Thread#stop()方法所使用的方法及其所有相关问题.我可以看到这种方法在拥有的代码中是可接受的(由于已知的逻辑流程),但在库代码中却没有.ThreadDeath终止线程,并通过强制程序员处理此事件来缓解类似问题.但是,它给代码带来了很大的负担,需要在任何地方提到异常.有一个原因并非一切都会抛出InterruptedException.NullPointerExceptions可能会出现空结果,导致与第1点相同的问题.在大型代码库中几乎不可能找到这些原因.我建议您定期检查 Thread.currentThread().isInterrupted() 在您知道可以安全停止的点并在设置后停止。
您可以在检查此标志并抛出自定义未经检查的异常或错误的方法中执行此操作。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |