Java:スレッドでエラー発生時に処理を終わらせる
以下の事が出来ずに悩んでいます。
これ参考になるかな?
というようなWEBページ等がありましたら、教えていただけると助かります。
■やりたいこと
・aaa.javaから、「スレッド1」「スレッド2」「スレッド3」の処理を呼び出し、それぞれのスレッドで処理を実行する。
・全てのスレッド処理が完了したら、次の処理へ進む。
・「スレッド1、2、3」で、何かしらのエラーが発生した場合は、「aaa.java」の処理を終わらせる。
■現状
・aaa.javaから、「スレッド1、2、3」の処理を呼び出し、それぞれ処理を実行させる事は出来た。
・すべてのスレッドが完了したら次の処理へ進む事は出来た。
・「スレッド1、2、3」のどこかでエラーが発生した場合でも、処理の完了となり、「次の処理」へ進んでしまう。
もうちょっと細かい事を書くと、各スレッドでは、それぞれデータ作成のSQLを実行する処理をさせているのですが、
そのSQLが何かしらの要因でエラーで戻ってきた場合、次の処理へ進んでしまうとまずいです。
そのため、どこかのスレッドのSQLがエラーになったら、スレッドを呼び出した元の「aaa.java」でエラー・終了。となるようにしたいです。
一応、各スレッドでSQLのエラーとなった場合には「catch」に飛んでる。状態ではあるのですが、aaa.java側に戻って終わらせる事が出来ず。。。
ソースはだいぶ削りましたが、参考に以下記載します。
(削りすぎている可能性もありますが、その際はごめんなさい。)
すみませんが、よろしくお願いします。
----------------------------------------
aaa.java
public void Sql_Exec() throws SQLException, IOException {
/*
ループ条件の取得。(省略)
*/
//ループ処理。
for (ループ条件(省略)) {
//スレッドの呼び出し。
//スレッド1
Thread_1 exec_1 = new Thread_1(引数もろもろ);
Thread thr_1 = new Thread(exec_1);
thr_1.start();
//スレッド2
Thread_2 exec_2 = new Thread_2(引数もろもろ);
Thread thr_2 = new Thread(exec_2);
thr_2.start();
//スレッド3
Thread_3 exec_3 = new Thread_3(引数もろもろ);
Thread thr_3 = new Thread(exec_3);
thr_3.start();
try {
//全てのスレッドが終わるまで待つ。
thr_1.join();
thr_2.join();
thr_3.join();
} catch (InterruptedException e) {
//例外処理
e.printStackTrace();
}
}
}
----------------------------------------
スレッド1~3.java
public class Thread_1 extends Thread{
public void run(){
/*
ループ条件の取得。(省略)
*/
//ループ処理。
for (ループ条件(省略)) {
try (Connection con1 = DB接続。) {
String sql1 = 実行SQL取得;
PreparedStatement pstmt1 = con1.prepareStatement(sql1);
int aaa = pstmt1.executeUpdate();
con1.close();
} catch (SQLException | IOException | JAXBException e) {
e.printStackTrace();
throw new RuntimeException("例外!");
}
}
}
}
----------------------------------------