Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(threadの処理)
閲覧数:859
掲示板(threadの処理)
名前
匿名
題名 threadの処理
質問内容

質問を評価する
(0ポイント)
プログラミング初心者です。
入門書のThreadのサンプルコードを入力し、実行したの
ですが、実行結果が本と違うものになりました。
コードは以下のものです

public class Car extends Thread {
    private String name;
    
    public Car(String nm){
        name = nm;
    }
    
    public void run(){
        for(int i = 0; i < 5; i++){
            System.out.println(name 
+"の処理をしています");
        }
    }
}

class Sample1
{
    public static void main(String[] args){
        Car car1 = new Car("1号車");
        car1.start();
        
        for(int i = 0; i < 5; i++){
            System.out.println("main()
の処理をしています");
        }
    }
}

本では実行結果が

main()の処理をしています
main()の処理をしています
1号車の処理をしています
main()の処理をしています
1号車の…
となっているのですが、私が実行した結果、

main()の処理をしています
main()の処理をしています

1号車の処理をしています
1号車の処理をしています


となり、処理の流れがおかしくなってしまいました。
何度も確認したのですが、コードの入力は本と同じで、
またThreadについて調べてみたのですが思ったような解
答が得られず原因がわからない状態です。
javaのバージョンは1.7.0update13です。
何か原因に心当たりのある方がいらっしゃいましたら、
ご解答していただけたら幸いです。


質問日時 2013-02-16 22:48:46
名前
匿名
回答内容

回答を評価する
(20ポイント)
初心者って言ってるけど、スレッドを触る前に何を勉強したの?
マルチスレッドって初心者の触るものじゃないよ。
回答日時 2013-02-16 23:13:21
名前
匿名
回答内容

回答を評価する
(0ポイント)
解答ありがとうございます。
購入した入門書を頭から順番にやっていたら急にスレッ
ドがでてきたといった感じです。その本の順番で言う
と、
Helloworld
変数について
式、演算子
if,switchの条件と論理演算子
for,while等の繰り返し
配列
クラス、インターフェイスについての大まかなしくみ
パッケージ、インポートの使用
簡単な例外

の次にスレッドを使ったコードが出て来ました。
回答日時 2013-02-16 23:28:39
名前
匿名
回答内容

回答を評価する
(0ポイント)
んー。
スレッドが何か判る?
回答日時 2013-02-17 14:18:45
名前
匿名
回答内容

回答を評価する
(30ポイント)
Threadをまずは理解しましょう。
まず、ここではプロセスと言う一番大きな処理単位が存在します。

そのプロセスからメインスレッド(メインルーチン)が起動されます。

そしてここでいうcar1がさらにメインスレッドからスレッドとして起動されます。

あと、Threadのstartは実行指示(実行可能状態)するだけですぐに開始しろではありません。

自分が上司(メインスレッド)だとして部下(car1)に指示してもすぐに処理を開始するかは部下次第ということです。

部下の処理が終わるのを待つのであればjoinを使用します。
どちらにしても上記のコードで期待しているような処理結果を得るのはたまたまでしかありえません。
ちゃんと制御可能なコードを書けばできますが上記コードでは基本無理です。

回答日時 2013-02-17 15:38:38
名前
匿名
回答内容

回答を評価する
(0ポイント)
>スレッドが何か判る?
プログラムの処理の流れといった、かなり漠然とした知
識しかありません。リファレンス等も読んだのですが、
まだまだ浅い理解しかできておりません。

>上記コードでは基本無理です。
解答ありがとうございます。ランタイム等の不具合では
ないとわかっただけでもありがたく、それ以外もとても
参考になるお答えでした。

最初にいただいたご意見のように、Threadを使用したプ
ログラムよりも先に、他のもっと基本的な知識を深めて
からもう一度このコードと向き合ってみたいと思いま
す。

ご解答、ご意見をしてくださった方々本当にありがとう
ございました。
回答日時 2013-02-17 19:45:51
名前
匿名
回答内容

回答を評価する
(0ポイント)
大抵の初心者向けの本で問題なのは、一冊で基本を全て書こ
うとして、詰め込みすぎていることだと思う。
コードを頭から見ていくと、(途中で飽きなければ)何とな
く理解した気になってしまうんだな。

コードの一つ一つを10回、20回と少しずつ変化を付けて書き
直して、トライ&エラーを繰り返し、他の人が書いたコード
のそれに類する部分が分かるようになって、初めて次の段階
に進める。本来はね。

そして、コンピュータの上でプログラムがどう動いてるのか
も見えるようになって初めて、マルチスレッドの意味も必要
性も解ってくるんじゃないかな。

仕事だとそう悠長なことも言ってられないけど。
ただ、生半可なままだとそのうち周囲を困らせることにもな
る。
基礎をじっくり固めた人間の方が、最初に出遅れても結局残
れると思うんだな。

回答日時 2013-02-17 21:33:20
名前
匿名
回答内容

回答を評価する
(0ポイント)
それにしても、マルチスレッドのサンプル実行に「必ずこう
いう順番になるとは限らないよ」と書いてないのもどうなの
か。
回答日時 2013-02-17 21:35:15

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道