在Java中停止线程?

时间:2008-10-29 16:22:24

标签: java multithreading

我正在编写一段连接到服务器的代码,使用该连接生成一堆线程并执行一堆“东西”。

在某些情况下连接失败,我需要停止所有操作并从头开始使用新对象。

我想在对象之后清理但是在线程上调用thread.stop,但这种方法似乎已被弃用。

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

6 个答案:

答案 0 :(得分:16)

看这里:

HowToStopAThread

中停止线程的建议方法

答案 1 :(得分:3)

假设您的线程在您的控制之下 - 即他们没有调用任何可能在没有代码执行的情况下永远等待的东西 - 我会用一个简单的(但是线程安全的 - 使用volatile!)标志来关闭它

有关C#中的示例,请参阅this article - Java等效项应该很容易解决。在线程下次等待之前调用interrupt将不起作用,stop可能会使您的应用处于难以预测的状态。在可能的情况下,转而进行干净,有序的关机。

答案 2 :(得分:2)

有一个非常相似主题的问题:

How to abort a thread in a fast and clean way in java

答案 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();
}

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