2012-05-10 21 views
-2

Javaコードのある時点でExceptionが発生すると、制御はcatchブロックに移動します。しかし、実際にこのコードがマルチスレッドのrun()メソッドの中にある場合、Exceptionが発生したときにコードをrun()メソッドで終了するように指示するにはどうすればよいですか?例外が発生するたびにスレッドを停止する

つまり、Exceptionが発生したことを知っているので、run()メソッドが終了したスレッドにどのように指示できますか?

+4

質問の一部を見逃しているようです... – MByD

+0

So?............ –

+0

あなたは何をしたいのかについてもっと詳しく説明する必要があります。実際に起こっている事柄などが含まれています。もちろん、コードは千語に相当します。この質問は現在の形で合理的に答えられることはできません。 –

答えて

1

:(おそらくより良い)return明示的またはあなたの終了条件を設定しますあなたのThreadのメソッドを呼び出すと、他の方法でreturnを呼び出すのと同じ方法でThreadを終了する、returnを簡単に終了できます。あなたのThreadが複数のメソッドを持っている場合

たぶん、あなたはExceptionを監視し、Exceptionが発生した場合にreturnを呼び出し、このような何か、...

public void run() { 
    try { 
     // your code goes here 
    } 
    catch (Exception e) { 
     return; 
    } 
} 

しかし、最善の方法は、それぞれのメソッドを持っているかもしれませんそれがExceptionを投げることができると宣言してください。たとえば、あなたのThreadはこのようであれば...

public MyThread extends Thread { 

    public void run() { 
     try { 
      runLongTask1(); 
      runLongTask2(); 
     } 
     catch (Exception e) { 
      return; 
     } 
    } 

    public void runLongTask1() throws Exception { 
     // your code here 
    } 

    public void runLongTask2() throws Exception { 
     // your code here 
    } 
} 

は、他の方法のそれぞれが Exceptionを投げることができる方法を参照してください。したがって、 Exceptionがこの Threadのメソッドのいずれかでスローされた場合、 run()メソッドの try-catchThreadreturnがトリガーされ、終了します。もちろん

あなたrun()方法でtry-catchは、メソッドのすべてのコードをカバーする場合、それはとにかくrun()方法の終わりに到達したとき、それは暗黙的であるので、あなたは、実際にreturnする必要はありません。

+0

いくつかの例外がスレッドを強制的にキャッチしても強制的に終了するかどうか知りませんか? – Lealo

3

...この例外が発生したときにrun()メソッドでコードを終了するように指示するにはどうすればコードが自動的にrun()メソッドが終了したスレッドに指示できますか?それは例外が発生したことを知っていますか?

あなたが正しく理解している場合は、catchブロックreturnにコードを記載するか、終了条件を設定してください。これはスレッドを終了させます。

シナリオのカップルがあります:

あなたが外try/catchを使用している場合は、明示的なreturnは必要ありません:

public void run() { 

    try { 
     while (!someExitCondition) { 
      doSomethingUseful(); 
     } 
    } 
    catch (Exception e) { 
     doSomethingWithTheException(e); 
     // Just falling through ends the thread, because 
     // `run` returns 
    } 
} 

あなたは、内側try/catchを使用している場合は、あなたが使用する可能性がありますあなたはになら

public void run() { 

    while (!someExitCondition) { 
     try { 
      doSomethingUseful(); 
     } 
     catch (Exception e) { 
      doSomethingWithTheException(e); 
      return; // Terminates the thread; alternately, set a termination condition 
     } 
    } 
} 
+0

ありがとうございますが、doSomethingWithTheExceptionコードには何を書いていますか? –

+0

@AbhishekShivkumar:これは、例外を処理するコードのプレースホルダ行です。例外を使って行うべきことは、コードが何を行い、例外にどのように対応すべきかによってまったく異なります。 –

関連する問題