public class Javajoin{
public static void main(String[] args){
 Num num = new Num();
 Counter counter1 = new Counter(num);
 Counter counter2 = new Counter(num);
for (int i = 0; i<10; i++){
num.testEquals();
try{
Thread.sleep(100);
}catch(InterruptedException e){}
 }

 counter1.stopCounter();
 counter2.stopCounter();
 
 counter1=null;
 counter2=null;
 System.gc();
}
}
class Num{
private int x =0;
private int y =0;
//synchronized 
void increase(){
x++;
y++;
}
void testEquals(){
System.out.println(x+","+y+" : "+(x==y));
}
}
class Counter extends Thread{
private Num num;
private boolean stop = false;

public void stopCounter(){
stop=true; 
}

Counter(Num num){
this.num=num;
this.start();
}
public void run(){
while(!stop){
num.increase();
}
}
}
运行结果:
707,845 : false
22843940,22725197 : false
44681323,44744869 : false
67714345,67903149 : false

按书上的解释说可能是1号线程执行到x++还没执行y++的时候,二号线程就夺得CPU控制权执行了x++,y++使得 x多加了一次,我的问题是:
当二号线程走完了以后 1号线程是接着执行未执行完y++呢 还是从哪里开始执行?要是接着执行刚才1号没走完的y++的话,那么执行结果x和y的差距应该差距在1以内,怎么会出现差距那么大得结果呢?
我猜想是不是2号执行完后 1号线是重新执行increase函数呀?