为什么在run()方法里为sa赋值,在main方法里执行start()后sa没有+1,
其次为什么sName一开始也没变输出结果是“vandeleur”,而在输出t.sa的时候sName却变为“vandeleur 0 1 2 3”
public class Tux extends Thread {
static String sName = "vandeleur";
int sa=33;
public void run() {
for (int i = 0; i < 4; i++) {
sName = sName + " " + i;
}
sa+=1;
}
public static void main(String argv[]) {
Tux t = new Tux();
t.start();
//System.out.println(t.sa); //如果这条注释后则sName为vandeleur
System.out.println(sName);
}
}
注释掉System.out.println(t.sa);的运行结果为:
vandeleur
去掉注释System.out.println(t.sa);的运行结果为:
33
vandeleur 0 1 2 3
因为在打印的时候线程未必启动了,所以会出现这种问题,解决办法加上Thread.sleep(time)延迟打印时间
两种情况执行个几十次,你会发现每次的输出结果可能不同
因为对变量的操作和打印是在两个线程里面的。main 方法所在的线程始终处于启动动态,所以先执行了,执行的时候打印的是默认值0.