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