說我有這樣的事情Java:停止運行時間過長的線程?
public void run(){
Thread behaviourThread = new Thread(abstractBehaviours[i]);
behaviourThread.start();
}
我想等到abstractBehaviours [I] run方法有兩種成品或運行5000毫秒。我怎麼做? behaviourThread.join(5000)似乎沒有這樣做afaik(我的代碼有問題,我已經把它放在那裏)。
所有抽象abstractBehaviour類當然是Runnable。我不想在每個運行方法中實現它,因爲這看起來很醜陋,而且有很多不同的行爲,我寧願將它放在調用/執行線程中,只做一次。
解決方案?第一次做這樣的事情。謝謝!
編輯:因此,中斷解決方案將是理想的(需要對AbstractBehaviour實現進行最小限度的更改)。但我需要線程停止,如果它已經完成或5000毫秒已經過去,所以像下面的東西不會工作,因爲線程可能會在父線程中的while循環之前完成。合理?任何解決這個問題的方法,我都願意從顯然啓動線程的線程中完成。
long startTime = System.currentTimeMillis();
behaviourThread.start();
while(!System.currentTimeMilis - startTime < 5000);
behaviourThread.interrupt();
try {
behaviourThread.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
編輯:請不要介意我看到有一個Thread.isAlive()方法,解決了所有我想
@約翰:與他的問題相匹配 - 除了標題,其中談到*停止*一個線程。 – 2010-03-22 22:33:48