-1

私は次のようにスレッドを開始しています:

public void startTask(Runnable r)
{
    running = true;
    Log.i(tag, "-----------start.Runnable-----------");

    final Thread first = new Thread(r);
    currentTask = first;
    first.start();

    Thread second = new Thread(new Runnable() {

        @Override
        public void run() {
            try{
                first.join();
            }
            catch(InterruptedException e){

            }
            running = false;
        }
    });

    second.start();

}

そして、現在の操作をキャンセルしたい場合は、この記事に従ってThereadを使用してキャンセルします:http ://forward.com.au/javaProgramming/HowToStopAThread.html :

public void cancelTask()
{
    Log.i(tag, "-----------cancelTask()-----------");
    try{
        currentTask.interrupt();
        running = false;
    }
    catch(SecurityException e){
        e.printStackTrace();
    }
}

cancelTask​​の後もアプリケーションは実行されていますが、例外があります。

12-05 20:29:00.274: W/System.err(13533): java.lang.InterruptedException
12-05 20:29:00.274: W/System.err(13533):    at java.lang.VMThread.sleep(Native Method)
12-05 20:29:00.294: W/System.err(13533):    at java.lang.Thread.sleep(Thread.java:1047)
12-05 20:29:00.294: W/System.err(13533):    at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:331)
12-05 20:29:00.304: W/System.err(13533):    at com.rsd.myfirstapp3.ProgressServiceActivity$2.run(ProgressServiceActivity.java:174)
12-05 20:29:00.314: W/System.err(13533):    at java.lang.Thread.run(Thread.java:864)

スレッドを使用したこのような操作では、通常の例外ですか?

4

1 に答える 1

0

スレッドが単独で停止されたか、外部プロセスによって停止されました。スレッドが実行していることをすべて実行した後に実行を終了することを意味します。この時点では、InterruptedException はスローされません (これは明らかです)。ただし、親スレッド (スレッドを開始するスレッド) は、その実行の間に実行中のスレッドを停止したい場合があります。この場合、例外 InterruptedException がスローされ、この例外がスレッドによって受信されます。これは主に、外部プロセス/親スレッドによって停止されているときに、このトレッドが何か (リソースのクリーニング、IO のクローズなど) を実行したいためです。参照

于 2016-11-29T03:43:40.067 に答える