3

私は Java Android プラットフォームで作業しています。メインスレッドから子スレッドを作成しています。要件として子スレッドを停止したい。私の子スレッドには、ループを持たない単純な関数があります。いつでも子スレッドを強制終了し、それが使用しているリソースを解放したいと考えています。私はそれを検索し、interrupt() 関数を見つけました。私のスレッドは次のとおりです。

public class childThread implements Runnable{
  public void run() {
     firstFunction();
     secondFunction();
    }
}

メインスレッドには、スレッドの上で開始する次のコードがあります。

Thread tChild;
tChild = new Thread(new childThread(), "Child Thread");
tChild.start();

私のrun()関数はこのように関数を呼び出しています。これをどのように使用interrupt()しますか?子スレッドを強制終了し、そのリソースの割り当てを解除する他の方法を教えてください。

4

5 に答える 5

2

ループがないので、Thread.interrupted() の値をチェックします。firstFunction(); と仮定します。関数 firstFunction(); 内の適切なポイントをチェックインする必要があります。secondFunction(); 条件 Thread.interrupted() を実行し、true の場合はメソッドを終了します。ループがないことは知っていますが、概念的には次のようになります。

    Runnable runnable = new Runnable() {
      private int counter;

      public void run() {
        while(true){
          System.out.println(">> Executing " + counter++);

          if(Thread.interrupted()){
            break;
          }
        }

      }
    };

    Thread thread = new Thread(runnable);
    thread.start();

    Thread.sleep(10 * 1000);

    thread.interrupt();
于 2013-06-15T12:05:48.563 に答える
0

子スレッドはThread.interrupted()定期的にチェックし、true を返す場合は終了する必要があります。

コードにループがあるかどうかは関係ありません。キャンセルが必要かどうかを確認するには、コード実行パスのさまざまなポイントを選択する必要があります。

于 2013-06-15T11:47:00.593 に答える