Javaのマルチスレッドで例外をキャッチする方法は?
Javaのマルチスレッドで例外処理する方法はいくつかあります:
- runメソッドの中でtry-catch文を使用して例外をキャッチし、catchブロックで例外を処理します。
public class MyRunnable implements Runnable {
@Override
public void run() {
try {
// 执行线程任务
} catch (Exception e) {
// 处理异常
}
}
}
- ExecutorServiceのsubmitメソッドを使用してタスクを提出する際は、Futureオブジェクトのgetメソッドを使って実行結果を取得し、getメソッドを呼び出す際に例外をキャッチすることができます。
ExecutorService executorService = Executors.newFixedThreadPool(10);
Future<?> future = executorService.submit(new MyRunnable());
try {
future.get();
} catch (Exception e) {
// 处理异常
}
- 未捕捉例外を処理するためにUncaughtExceptionHandlerインターフェースを使用します。ThreadクラスのsetDefaultUncaughtExceptionHandlerメソッドを使用して、デフォルトの未捕捉例外ハンドラを設定することができます。また、ThreadクラスのsetUncaughtExceptionHandlerメソッドを使用して、特定のスレッドに未捕捉例外ハンドラを設定することもできます。
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 处理未捕获异常
}
});
- 自作のスレッド未処理例外処理を実装するために、Thread.UncaughtExceptionHandlerインタフェースを使用し、runメソッド内でtry-catchステートメントを使用して例外をキャッチし、UncaughtExceptionHandlerインタフェースのuncaughtExceptionメソッドを使用して例外をスローします。
public class MyRunnable implements Runnable {
@Override
public void run() {
try {
// 执行线程任务
} catch (Exception e) {
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
}
}
}
Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 处理未捕获异常
}
};
Thread thread = new Thread(new MyRunnable());
thread.setUncaughtExceptionHandler(handler);
thread.start();
具体の要件に合わせて処理方法を選択することができます。