我有2個班,鐵的Class1和Class2中Java線程通知
比方說,我在Class1的做到這一點:
Class2 class2 = new Class2();
Thread thread = new Thread(class2);
thread.start();
...
thread.stop();
現在我想在Class2中的run方法來檢查我的線程停止時,我怎樣才能做到這一點? 所以當class1的停止線,我希望得到一些警惕的Class2,它停下來,然後做一些事情
我有2個班,鐵的Class1和Class2中Java線程通知
比方說,我在Class1的做到這一點:
Class2 class2 = new Class2();
Thread thread = new Thread(class2);
thread.start();
...
thread.stop();
現在我想在Class2中的run方法來檢查我的線程停止時,我怎樣才能做到這一點? 所以當class1的停止線,我希望得到一些警惕的Class2,它停下來,然後做一些事情
不要使用stop()
,使用interrupt()
。
如果你聽從1點,在Class2
你可以使用:
public void run() {
if(Thread.currentThread().isInterrupted())
//somebody interrupted me, ouch!
}
問題不在於如何阻止線程... –
@Thomas Uhrig:它仍然是最好的答案,因爲它完成了所需的任務,並指出了現有代碼中的一個嚴重問題。 –
一旦線程已經 「停止」,這意味着該run
方法Class2
已退出。因此,沒有辦法在執行after
線程停止的run
方法中擁有代碼。
您可以偵聽中斷並處理該中斷,但是該處理將在線程仍在運行時完成。
您還可以在Class2
中使用不同的方法,一旦線程停止,您可以從Class1
調用該方法。
首先不要使用thread.stop(),因爲它是已棄用。因此取決於這種方法是不可取的。第二:解決它有多種方式,即基本上試圖關機或通信。
Thread.currentThread().isInterrupted()
通常中斷主要用於通知其他人它正在請求關閉它。 (Brian Goetz的「實踐中的併發」對此有着很好的闡述)。Thread.stop()不應該被使用的主要原因並不是它已被棄用,而是它爲什麼不被使用的原因:它可以讓應用程序處於不一致的狀態,因爲它不能以某種方式實現尊重代碼中的一致性保證。 –
http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html是一個很好的參考,它爲什麼被棄用。 – Jatin
你的class2應該得到一個InterruptedException,就是這樣。 BTW http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#stop()
出於興趣,您試圖實現什麼?
您是否閱讀過'Thread.stop'的API文檔?他們很認真。 –
只需在停止線程後調用class2的方法:thread.stop(); class2.doSomething(); –
那也是我的想法 – user999379