• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マルチスレッドのプログラム)

マルチスレッドのプログラムの挙動に疑問があります

このQ&Aのポイント
  • マルチスレッドで動くプログラムで、URLのページのソースを取得する処理を行っています。
  • しかし、処理の順序が思ったようにならず、「★★終了★★」という文字列が先に表示されます。
  • マルチスレッド内での処理順序を正確に制御するにはどうすれば良いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>その3人集めて一斉に行う処理はマルチスレッドで動作 >させて3人のすべての動作が終了したら「終了」という ご自分で何をすればいいのかわかってるように思えますけど(わかってるというのに気づいていないだけで) 「3人のすべての動作が終了したら」というのは「3人のすべての動作が終了するのを待って「終了」」という事じゃないですか? 質問のプログラムに「終了するのを待つ」というのはどこにあります?

unko347
質問者

補足

「待つ」という処理が必要だったんですね。 調べてみたらjoin()というメソッドでスレッドの待機が できるとのことだったので以下のようにしてみたところうまくいきました。ありがとうございました。 public static void main(String[] args) throws InterruptedException { String[] listUrls = {"http://www.yahoo.co.jp", "http://www.google.co.jp", "http://httpd.apache.org"}; ExThread[] threads = new ExThread[listUrls.length]; for(int i=0; i<listUrls.length; i++) { threads[i] = new ExThread(listUrls[i]); threads[i].start(); } // 全てのスレッドが終了するのを待つ for(int i=0; i<listUrls.length; i++) { threads[i].join(); } System.out.println("★★終了★★"); }

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

>3人のすべての動作が終了したら「終了」という >文字列を表示させたいと考えています。 run()が終わったら何か情報を返すようにすれば? で、それまで待つようにする。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

startは処理の開始です。 3人を集めて「やれ」と指令したに過ぎませんので、 当然のごとく、終了を待ってなどいないのです。 「やれ」と指令するとすぐにSystem.out.println("★★終了★★");を行います。 処理を待っていたんではマルチスレッドにはならないでしょ?

unko347
質問者

補足

ご回答ありがとうございます。 その3人集めて一斉に行う処理はマルチスレッドで動作 させて3人のすべての動作が終了したら「終了」という 文字列を表示させたいと考えています。

関連するQ&A