2

次の Java プログラムがあります。

public class A extends Thread {
    int count;

    @Override
    public void run() {
        while (true)
            count++;
    }

    public static void main(String...strings){
        A obj = new A();
        obj.start();
        System.out.println("The value of count is " + obj.count);
    }
}

このプログラムを実行すると、出力は次のようになりますThe value of count is 0(そして、プログラムは実行され続けます)。スレッドに関する私の理解では、無限ループで実行され、0 が出力されることはありません。このプログラムの性質を理解するのを手伝ってくれる人はいますか。

4

3 に答える 3

4

スレッドは System.out.println の実行とほぼ同時に開始されます。スレッドはバックグラウンドであるため、println は実行を待機せず、count の初期値が表示されます。

また余談ですが、ループ スレッドで行われた変数への変更をメイン スレッドが確実に認識できるようにするには、count 変数を volatile として宣言する必要があります。

于 2013-09-25T01:51:12.490 に答える
1

「スレッド」は印刷を行っていません。メインは印刷です。何が起こると思っていましたか?

また、両方のスレッドが変数に安全にアクセスできるように、何らかの保護を使用する必要があります。

于 2013-09-25T01:52:37.050 に答える
0

System.out 呼び出しは 1 回しか実行されませんか?

while ループ内に System.out.println 呼び出しを配置し​​ます。

getter/setter メソッドを使用してcount、特定の時点でいずれか一方のみが変数にアクセスできるようにすることをお勧めします。

于 2013-09-25T01:52:46.807 に答える