在Java中停止线程?
我正在编写一段连接到服务器的代码,使用该连接生成一堆线程并执行一堆“东西”。
在某些情况下,连接失败,我需要停止一切,并从头开始使用新对象。
我想在对象之后清理但是在线程上调用thread.stop,但是这个方法似乎已被弃用了。
这样做的推荐替代方案是什么? 我应该为每个线程编写自己的清理和退出方法吗? 将线程设置为null? 或者是其他东西?
看这里 :
在HowToStopAThread中停止线程的建议方法
假设你的线程在你的控制之下是合理的 – 即他们没有调用任何可能在没有代码执行的情况下永远等待的东西 – 我会用一个简单的(但是线程安全的 – 使用volatile!)标志来关闭它。
有关C#中的示例,请参阅此文章 – Java等效应该很容易解决。 在线程下一次等待之前调用interrupt
不会产生任何影响,并且stop
会使您的应用程序处于难以预测的状态。 尽可能采用干净,有序的停机方式。
有一个非常相似主题的问题:
如何在java中以快速而干净的方式中止线程
如果Thread.interrupted()返回true,请使用your_thread.interrupt并检查线程。 如果是这样,请正确关闭您的线程。
我使用了这个非常简单的示例模式。 它似乎工作,易于理解和实施。
private Thread m_CleanupThread = null; public void threadCleanUp(){ m_CleanupThread = new Thread(this); m_CleanupThread.Start(); }
该线程将终止,垃圾收集器将完成剩下的工作。