2008-10-29 133 views
9

我正在写一段代码,连接到服务器产生一堆线程使用该连接,并做了一堆“东西”。在Java中停止线程?

有某些情况下,当连接失败,我需要停止一切从头开始一个新的对象开始。

我想清理对象之后但调用使用Thread.stop上线,但这种方法貌似过时。

这样做的建议替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为null?或者是其他东西?

回答

1

使用your_thread.interrupt停止线程建议的方法,并检查您的线程,如果Thread.interrupted()返回true。如果是这样,请正确关闭你的线程。

3

假设你的线程是合理的控制之下 - 即他们没有任何调用它会潜在地等待永远没有你的代码执行 - 我将关闭它用一个简单的(但线程安全的 - 使用volatile!)旗。

在C#示例,请参阅this article - 相当于Java中的应该很容易找出。调用interrupt将不会有任何效果,直到线程下一次等待,stop可以让您的应用程序处于难以预测的状态。只要有可能,就去做一个干净而有序的关机。

1

我用this非常简单的示例模板。它似乎工作,很容易理解和实施。

1
private Thread m_CleanupThread = null; 

public void threadCleanUp(){ 
    m_CleanupThread = new Thread(this); 
    m_CleanupThread.Start(); 
} 

此线程将终止,垃圾回收器将完成剩下的工作。