Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

run() とstart() の違い

class X extends Thread{
    int x=0;    
    public synchronized void run(){
        for(int i = 0; i < 10000; i++ ){
            addX();
        }
    }
    synchronized int getX(){
        return x;
    }
    void addX(){
        x = x + 1;
    }
    public static void main(String[] args){
        X x = new X();
        x. start();
        System.out.println(x.getX());
    }
}
出力は0になります。
3行目のrun()メソッドをstart()に書き換えると10000になります。run()とstart()の違いはなぜでしょうか?
run()も10000になると思ったのですが。

5

回答

8064

閲覧

5件の回答

評価

0

ソース見られるから見てみるといいよ。

評価

0

start
に実装するのと
run
に実装するの
どっちもThreadの同名のメソッドを
オーバーライドするものだって言うことは
判っているかしら?

評価

0

まずThreadの用法として、startをオーバーライドする事はないと思いますが。

run()で10000にならない理由は、main threadとnew threadの2つの線を書いて、どのタイミングで何が起こるかを書きだしてみれば分かると思う。

評価

0

なるほどタイミングですね。new threadが加算し始める前に、メインスレッドがxの値を出力してしまったのですね。

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