Quantcast
Channel: 質問!ITmedia 新着質問(Java/253)
Viewing all articles
Browse latest Browse all 2439

Java:スレッドでエラー発生時に処理を終わらせる

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

Viewing all articles
Browse latest Browse all 2439

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>