0

Thread クラスのrun()メソッドで、終わりのない関数を呼び出しています。特定の期間だけスレッドを実行する必要があります。

スレッドが開始されるとスレッドを制御できません。スレッドを破棄する方法はありますか?

yield()、、などを試しましたsleep()...

PS - 終わらない機能を変更することはできません

4

3 に答える 3

0

http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.htmlは、すべての質問に回答します。特にセクション Thread.stop の代わりに何を使用すればよいですか?

それが役に立てば幸い

于 2013-04-10T05:49:01.203 に答える
0

これは多すぎるかもしれませんが、割り込みを台無しにしたくない場合は、これが解決方法です。

 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 でラップしています。間隔内に終了しない場合は、基本的にそれを強制終了します-割り込みを送信します。

于 2013-04-10T05:59:52.153 に答える