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函数呀?
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函数呀?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货