2008-10-29 197 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(); 
} 

此線程將終止,垃圾回收器將完成剩下的工作。