我认为在你想要的时候杀死一个thread
对很多人来说都是一个问题。我最近遇到了通过抛出thread
来杀死exception
的方法。您对此有何看法?有没有人之前实现过这样的东西?
答案 0 :(得分:2)
你不应该杀死一个线程。你应该让它停下来。如果你有一个循环,你应该停止这个循环。如果你有一些耗时的功能,比如网络连接,你应该停止这个网络功能而不是杀死线程。无法保证使用Thread.stop()
函数
答案 1 :(得分:1)
停止线程的最佳方法是从线程中抛出InterruptedException
。如果抛出异常,则确保执行catch
和finally
块,因此线程能够释放锁和资源,关闭文件和已打开的连接等。
通常你想要从另一个线程停止一个线程。你应该不使用Thread.stop()
方法,因为它会立即停止线程,当关闭的线程仍然拥有锁,从不关闭的文件等时导致死锁。“官方”方式停止一个线程就是在你要停止的线程上调用interrupt()
方法。这会设置一个内部标志,可以通过Thread.interrupted()
进行检查。现在每个线程应该在方便的时候轮询Thread.interrupted()
,如果设置了标志,则抛出InterruptedException
:
if (Thread.interrupted()) throw new InterruptedException();