0
Thread thread;     

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yippi);  
final Handler hn=new Handler();
final TextView text=(TextView)findViewById(R.id.TextView01);
final Runnable r = new Runnable()
{
    public void run() 
    {
        text.settext("hi");
    }
};
thread = new Thread()
{

    @Override
    public void run() {
        try {
            while(true) {
                sleep(1750);
                hn.post(r);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};
    thread.start();
thread.stop();}

コードはこちら。実行可能なスレッドを停止できません。また、thread.stop()およびthread.destroy()は非推奨です。誰か助けてくれませんか?また、メソッドでスレッドを停止する方法もわかりませんthread.interrupt()。どうしたの?

4

4 に答える 4

2

Thread.stop() のJavaDocには、stop() が推奨されない理由の説明として次の記事がリストされています。

stop のほとんどの使用は、ターゲット スレッドの実行を停止する必要があることを示すために変数を変更するだけのコードに置き換える必要があります。ターゲット スレッドは、この変数を定期的にチェックし、変数が実行を停止することを示している場合は、適切な方法で run メソッドから戻る必要があります。stop-request の迅速な通信を確実にするために、変数は volatile でなければなりません (または、変数へのアクセスを同期化する必要があります)。

interrupt() は、おそらくもう来ていない何かを待っているスレッドを停止するのに適しています。スレッドを終了したい場合は、その run() メソッドを返すのが最善です。

于 2012-10-16T09:25:37.547 に答える
0

以下のコードのように、Threadのinterruptメソッドを使用して、スレッドを停止してみることができます。役に立つかもしれません。

public class InterruptThread {

    public static void main(String args[]){

      Thread thread = new Thread()
      {

        @Override
        public void run() {
            try {
                while(true) {
                    System.out.println("Thread is Runing......");
                    sleep(1000);
                }
            } catch (InterruptedException e) {
                // restore interrupted status
                System.out.println("Thread is interrupting");
                Thread.currentThread().interrupt();
            }
        }
       };
      thread.start();

      try {
          Thread.sleep(5000);
      } catch (InterruptedException e) {
          e.printStackTrace();
     }

     System.out.println("Will Interrupt thread");
     thread.interrupt();
  }

}

于 2012-10-16T09:02:06.983 に答える
0

ブール変数を作成してスレッドを停止し、のwhile(boolean)代わりに使用しwhile(true)ます。

于 2012-10-16T07:19:02.177 に答える
0

Thread.interrupt() を使用して、スレッド内で InterruptedException をトリガーできます。動作を示すコードを以下に追加しました。mainThread はコードの場所であり、タイマー Thread は割り込みの遅延トリガーを示すために使用されます。

public class Test {

    public static void main(String[] args) {

        final Thread mainThread = new Thread() {

            @Override
            public void run() {
                boolean continueExecution = true;

                while (continueExecution) {
                    try {
                        sleep(100);
                        System.out.println("Executing");
                    } catch (InterruptedException e) {
                        continueExecution = false;
                    }
                }

            }
        };

        mainThread.start();

        Thread timer = new Thread() {
            @Override
            public void run() {

                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("Stopping recurring execution");
                mainThread.interrupt();

            }
        };
        timer.start();
    }
}
于 2012-10-16T08:04:11.700 に答える