以下の事が出来ずに悩んでいます。 これ参考になるかな? というような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("例外!"); } } } } ----------------------------------------
↧