Thread クラスのrun()
メソッドで、終わりのない関数を呼び出しています。特定の期間だけスレッドを実行する必要があります。
スレッドが開始されるとスレッドを制御できません。スレッドを破棄する方法はありますか?
yield()
、、などを試しましたsleep()
...
PS - 終わらない機能を変更することはできません
Thread クラスのrun()
メソッドで、終わりのない関数を呼び出しています。特定の期間だけスレッドを実行する必要があります。
スレッドが開始されるとスレッドを制御できません。スレッドを破棄する方法はありますか?
yield()
、、などを試しましたsleep()
...
PS - 終わらない機能を変更することはできません
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.htmlは、すべての質問に回答します。特にセクション Thread.stop の代わりに何を使用すればよいですか?
それが役に立てば幸い
これは多すぎるかもしれませんが、割り込みを台無しにしたくない場合は、これが解決方法です。
public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
ThreadTest test = new ThreadTest();
test.go();
}
void go() throws InterruptedException{
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(new LongRunnable());
if(!service.awaitTermination(1000, TimeUnit.MILLISECONDS)){
System.out.println("Not finished within interval");
service.shutdownNow();
}
}
}
class LongRunnable implements Runnable {
public void run(){
try{
//Simultate some work
Thread.sleep(2000);
} catch(Exception e){
e.printStackTrace();
}
}
}
基本的に、ランナブルを ExecutorServie でラップしています。間隔内に終了しない場合は、基本的にそれを強制終了します-割り込みを送信します。