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 的初始值。

顺便说一句,计数变量应该声明为 volatile 以确保主线程看到循环线程中对变量所做的更改。

于 2013-09-25T01:51:12.490 回答
1

“线程”没有打印,你的主要是。你期待会发生什么?

您还应该使用某种保护,以便两个线程都可以安全地访问该变量。

于 2013-09-25T01:52:37.050 回答
0

System.out 调用不会只运行一次吗?

我会将 System.out.println 调用放在 while 循环中。

最好使用 getter/setter 方法count并确保在任何给定时间只有一个或另一个可以访问该变量。

于 2013-09-25T01:52:46.807 回答