- ベストアンサー
【質問】Java初心者がスレッドコード実行結果について質問
- Java初心者が「やさしいJAVA」のスレッドに関する記述について理解していません。コードを実行すると、mainの処理と1号車の処理がアトランダムに表示されずに全てmainの処理が連続して表示されます。なぜこのような結果になるのでしょうか?
- スレッドに関する記述(P.466)を読んでいますが、実行結果が理解できません。コードを載せておきます。
- Java初心者がスレッドの実行結果について質問です。コードを実行すると、mainの処理と1号車の処理が連続して表示されないことに疑問があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
i<5 の部分を i<30 とか i<50にしてみて下さい。 また Car1.start();を Car1.run();してみて下さい public void run()をpublic synchronized void run() としたりしてみてください。 この辺がJAVAの面白いところですね。
その他の回答 (2)
- tococo
- ベストアンサー率15% (3/20)
アプリケーションを実行しているプラットフォームがマルチスレッドを サポートしている場合、そのプラットフォームが持っているスレッドの機能(ネイティブスレッド)を利用します。 iouさんはWindows環境で実行されているそうですが、 UNIX等の別の環境で実行すると出力順序がかわることもありますよ。 また、それぞれが一度に出力されてしまった原因はほかの方もおっしゃられているように、 main()がcar1スレッドを開始する前に処理を終えてしまったためでしょう。 forループの中に下記の内容を付け加えてみてください。 平行して処理が行われていることが確認できます。 try { Thread.sleep(1000); catch(Exception e) {} ちなみに、私はWindows2000、j2sdk se 1.4.2_06 環境で実行しましたが ランダムに出力されました。
お礼
スレッドの処理は、OSに依存している部分が有るという事ですか。大変勉強になりました。どうも、ありがとうございました。
- osumitan
- ベストアンサー率33% (102/307)
自分のPCでもそのようになります。 スレッドが実行されてから、Sample1側で文字を表示する前に スレッド側の処理が終わってしまうのかもしれません。 No.1の方のおっしゃるように、for文でループする回数を増やして スレッドの処理に時間がかかるようにするといいようです。
お礼
はい、一方が始まる前に、もう一方の処理が終わってしまっているようです。iの値を増やしたところ、アトランダムに表示されました。どうも、ありがとうございました!
お礼
御返事が遅くなってしまい、大変申し訳ありません。 仰るとおりiの値を大きくしたら、アトランダムに表示されるようになりました。又、startメソッドとrunメソッドは必ずペアにしないといけないと思ってましたが、両方ともrunにしても動くのですね。勉強になりました。ありがとうございます!