Use*_*034 11 java multithreading
我想立即停止Java线程,但是当我尝试线程时,总是需要一些时间才能停止.是否有一种强制Java线程立即停止的好方法?
Ste*_*n C 18
没有好办法立即停止线程.
有Thread.stop(),但它是危险的和弃用.不要使用它,除非:
你完全理解这些问题,并且
您已彻底分析了您的代码,并确定问题不适用和/或风险可以接受.
有Thread.interrupt(),但不能保证线程会快速停止,甚至根本停止.行为将取决于应用程序线程代码是否已设计为通知并正确响应中断.
有一种编写线程来定期检查标志的方法,但如果不经常检查标志(意外或设计),则线程不会快速停止.
FWIW,旗帜和interrupt()方法大致相同.在这两种情况下,期望被中断的线程需要定期检查; 例如,通过调用interrupted()或isInterrupted()通过检查标志.
这些方法之间的区别在于,interrupt()当代码notify()在I/O操作中等待或阻塞时,该机制将起作用.因此,并且因为这interrupt是一种可接受的独立于应用程序的方式,所以通常优选应用程序特定flag机制.
有一种安全(快速)强制停止线程的好方法:
System.exit(0)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这具有杀死所有其他线程的副作用。
运行线程无法停止使用Thread.Interrupt,只能等待或阻塞线程可以使用Thread.Interrupt.But 停止使用共享变量来表示它应该停止它正在做的事情.线程应定期检查变量(例如:使用while循环)并以有序的方式退出.
private boolean isExit= false;
public void beforeExit() {
isExit= true;
}
public void run() {
while (!isExit) {
}
}
Run Code Online (Sandbox Code Playgroud)
在任何情况下都不要使用 Thread.stop - 如果您问这个问题,那么您对 Java 线程模型的了解不足以安全地使用它。
好奇的细节在这里:Java Thread Primitive Deprecation
如果您非常擅长 Java 并发,那么您就会明白为什么永远不应该使用它,即使它在您自己的代码中是完全安全的,它也会使您的代码被其他人污染和无法使用。相反,您可能最终会使用布尔变量技巧或其他一些模式来告诉线程何时应该完成然后退出。
不要使用 Thread.stop。曾经。
| 归档时间: |
|
| 查看次数: |
23220 次 |
| 最近记录: |