Javaスレッド学習ノート(両)スレッド異常処理
2408 ワード
スレッドキャプチャ例外:
場合、main()メソッドでは、次のコードのようなスレッドの異常をキャプチャできません.
上記のコードはmainメソッドでスレッド異常をキャプチャすることはできませんが、スレッドの異常情報をキャプチャするにはどうすればいいのでしょうか.
次はこのコードを見てみましょう
上の出力結果は
結論はmain()この方法は依然として異常なスレッドを捉えていないが,もちろん,この設定は合理的である.今、各スレッドには独自の異常処理メカニズムがあります.どうすればいいですか.文、スレッドを作成するとき、その文はいいです.
仕事を終える.
場合、main()メソッドでは、次のコードのようなスレッドの異常をキャプチャできません.
public class ExceptionThread implements Runnable{
@Override
public void run() {
throw new NullPointerException();
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
try {
System.out.println(" ");
executorService.execute(new ExceptionThread());
} catch (Exception e) {
e.printStackTrace();
System.out.println(" ");
}
}
}
上記のコードはmainメソッドでスレッド異常をキャプチャすることはできませんが、スレッドの異常情報をキャプチャするにはどうすればいいのでしょうか.
次はこのコードを見てみましょう
/**
*
*/
class MyExceptionThread implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
//
System.out.println(" ");
System.out.println(e);
}
}
/**
*
*/
class ExceptionThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
// 。
thread.setUncaughtExceptionHandler(new MyExceptionThread());
return thread;
}
}
/**
*
*/
class ExceptionThread2 implements Runnable{
@Override
public void run() {
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
//
throw new NullPointerException();
}
public static void main(String[] args) {
// ExceptionThreadFactory ,
ExecutorService executorService = Executors.newCachedThreadPool(new ExceptionThreadFactory());
try {
System.out.println(" ");
//
executorService.execute(new ExceptionThread2());
executorService.execute(new ExceptionThread2());
executorService.execute(new ExceptionThread2());
} catch (Exception e) {
e.printStackTrace();
System.out.println(" ");
}
}
}
上の出力結果は
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
結論はmain()この方法は依然として異常なスレッドを捉えていないが,もちろん,この設定は合理的である.今、各スレッドには独自の異常処理メカニズムがあります.どうすればいいですか.文、スレッドを作成するとき、その文はいいです.
仕事を終える.