我有以下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.任何人都可以帮助我理解这个程序的本质。
答案 0 :(得分:4)
线程在System.out.println运行的同时启动,并且由于线程是后台,println不会等待它运行,因此您将看到count的初始值。
另外,count变量应该声明为volatile,以确保主线程sees changes to the variable在循环线程中生成。
答案 1 :(得分:1)
“线程”没有打印,你的主要是。你期待发生什么?
您还应该使用某种保护,这样两个线程都可以安全地访问变量。
答案 2 :(得分:0)
System.out调用不会只运行一次吗?
我会将System.out.println调用放在while循环中。
对count
使用getter / setter方法可能更好,并确保在任何给定时间只有一个或另一个可以访问该变量。