多线程同步问题,[附简单代码]Java codepublic class ViolentAccessDemo{public static void main(String a
多线程同步问题,[附简单代码]
Java code
public class ViolentAccessDemo{ public static void main(String args[]) { ViolentObject violentObject = new ViolentObject(); Thread thread1 = new Thread(new ThreadAccess(violentObject)); Thread thread2 = new Thread(new ThreadAccess(violentObject)); thread1.start(); thread2.start(); for(int i=0;i<10;i++) { violentObject.print(); try{ Thread.sleep(500); }catch(InterruptedException e) { } } }}class ViolentObject{ private int x; private int y; public void increase() { x++; //我的理解是thread1执行到x++;没有执行y++退出。 y++; //thread2接着还是执行x++,这样的话,输出x的值肯定是x大才对,可是输出结果: } public void print() { System.out.println("x="+x+","+"y="+y); }}class ThreadAccess implements Runnable{ private ViolentObject violentObject; public ThreadAccess(ViolentObject vob) { System.out.println("this is constructor of ThreadAccess"); this.violentObject = vob; } public void run() { while(true) violentObject.increase(); }}
输出结果: this is constructor of ThreadAccess this is constructor of ThreadAccess x=0,y=0 x=84050630,y=89506803 //y居然比x大,这不违反规律了吗? x=165934856,y=166907497 x=250595453,y=257923836 x=336504131,y=328009964 x=432364945,y=416151003
[解决办法] 关注,是挺神气的....也许x++,和y++在运行的时候不是顺序执行的?期待高手解答. [解决办法] 因为你的使用的是同一个violentObject 对象,两个线程同时改变这个y值, [解决办法] x++ => tmp = x + 1; //A x = tmp; //B