• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スレッドに関して(高橋麻奈の本))

【質問】Java初心者がスレッドコード実行結果について質問

このQ&Aのポイント
  • Java初心者が「やさしいJAVA」のスレッドに関する記述について理解していません。コードを実行すると、mainの処理と1号車の処理がアトランダムに表示されずに全てmainの処理が連続して表示されます。なぜこのような結果になるのでしょうか?
  • スレッドに関する記述(P.466)を読んでいますが、実行結果が理解できません。コードを載せておきます。
  • Java初心者がスレッドの実行結果について質問です。コードを実行すると、mainの処理と1号車の処理が連続して表示されないことに疑問があります。

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

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

i<5 の部分を i<30 とか i<50にしてみて下さい。 また Car1.start();を Car1.run();してみて下さい public void run()をpublic synchronized void run() としたりしてみてください。 この辺がJAVAの面白いところですね。

iou
質問者

お礼

御返事が遅くなってしまい、大変申し訳ありません。 仰るとおりiの値を大きくしたら、アトランダムに表示されるようになりました。又、startメソッドとrunメソッドは必ずペアにしないといけないと思ってましたが、両方ともrunにしても動くのですね。勉強になりました。ありがとうございます!

その他の回答 (2)

  • tococo
  • ベストアンサー率15% (3/20)
回答No.3

アプリケーションを実行しているプラットフォームがマルチスレッドを サポートしている場合、そのプラットフォームが持っているスレッドの機能(ネイティブスレッド)を利用します。 iouさんはWindows環境で実行されているそうですが、 UNIX等の別の環境で実行すると出力順序がかわることもありますよ。 また、それぞれが一度に出力されてしまった原因はほかの方もおっしゃられているように、 main()がcar1スレッドを開始する前に処理を終えてしまったためでしょう。 forループの中に下記の内容を付け加えてみてください。 平行して処理が行われていることが確認できます。 try { Thread.sleep(1000); catch(Exception e) {} ちなみに、私はWindows2000、j2sdk se 1.4.2_06 環境で実行しましたが ランダムに出力されました。

iou
質問者

お礼

スレッドの処理は、OSに依存している部分が有るという事ですか。大変勉強になりました。どうも、ありがとうございました。

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

自分のPCでもそのようになります。 スレッドが実行されてから、Sample1側で文字を表示する前に スレッド側の処理が終わってしまうのかもしれません。 No.1の方のおっしゃるように、for文でループする回数を増やして スレッドの処理に時間がかかるようにするといいようです。

iou
質問者

お礼

はい、一方が始まる前に、もう一方の処理が終わってしまっているようです。iの値を増やしたところ、アトランダムに表示されました。どうも、ありがとうございました!

関連するQ&A