【发布时间】:2008-10-29 16:22:23
【问题描述】:
我正在编写一段连接到服务器的代码,它使用该连接产生一堆线程并执行一堆“工作”。
在某些情况下连接失败,我需要停止一切并从头开始使用新对象。
我想在对象之后进行清理,但在线程上调用 thread.stop,但这种方法似乎已被弃用。
推荐的替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为空?或者是其他东西?
【问题讨论】:
标签: java multithreading
我正在编写一段连接到服务器的代码,它使用该连接产生一堆线程并执行一堆“工作”。
在某些情况下连接失败,我需要停止一切并从头开始使用新对象。
我想在对象之后进行清理,但在线程上调用 thread.stop,但这种方法似乎已被弃用。
推荐的替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为空?或者是其他东西?
【问题讨论】:
标签: java multithreading
假设您的线程合理地在您的控制之下 - 即它们没有调用任何可能会在您的代码不执行的情况下永远等待的东西 - 我会用一个简单的(但线程安全的 - 使用 volatile!)标志关闭它.
请参阅this article 以获取 C# 中的示例 - Java 等效项应该很容易解决。在线程下一次等待之前,调用interrupt 不会有任何效果,并且stop 会使您的应用程序处于难以预测的状态。尽可能进行干净、有序的关机。
【讨论】:
如果 Thread.interrupted() 返回 true,请使用 your_thread.interrupt 并检查您的线程。如果是这样,请正确关闭您的线程。
【讨论】:
private Thread m_CleanupThread = null;
public void threadCleanUp(){
m_CleanupThread = new Thread(this);
m_CleanupThread.Start();
}
这个线程将终止,垃圾收集器将完成剩下的工作。
【讨论】: