消息关闭
    暂无新消息!
public class X implements Runnable
{
private int x,y;
public static void main(String[] args){
X that = new X();
(new Thread(that)).start();
(new Thread(that)).start();
}
public void run(){

for(;;)
{
x++;
y++;
System.out.println("x="+x+",y="+y);
}

}
}


为什么这个输出是这样的


关于这个输出我有两个疑惑,为什么这个不是同步的,但是却有线程安全的样子,同一行的xy居然都相等!
还有一个就是为什么输出会有重复 两个2 和两个都等于4

3个回答

︿ 3
并未对代码块进行同步,什么时候执行什么线程由底层操作系统或CPU说了算
︿ 2
public class X implements Runnable {
private int x, y;

public static void main(String[] args) {
X that = new X();
(new Thread(that)).start();
(new Thread(that)).start();
}

public void run() {

for (;;) {
x++;
y++;
if(x != y){
System.out.println("x:" + x + ":y" + y);
break;
}
}

}
}
这样运行一下更神奇
︿ 2
这个和操作系统有关的,每个线程获得的CPU时间不同的。某个线程获得的cpu时间多一点就可能连续输出了。