问答详情
源自:3-3 synchronized实现可见性代码(中)

在write和方法上加synchronized不能保证结果一定是6

使用synchronized实现可见性时,在wriite和read方法上都加上了这个关键字,但是main方法中启动的是两个线程,如果参数为false的先执行,那么结果就是0,程序的运行结果中确实还是可能是6或者0,请老师帮忙确认下

提问者:慕瓜0476209 2019-11-24 00:49

个回答

  • 一个爱西瓜的小伙
    2019-12-01 23:02:37

    synchronized分为对象锁和类锁。加在非静态方法上的锁是对象锁,由于main中new了两个实例,write和read方法是不同对象,因此两个锁不是同一把锁,不具有互斥性。

    所以出现0和6的原因就是出现在处理器的重排序原因。两个线程同时启动,但是先执行哪个线程是有处理器决定的。如果是读线程先执行,结果就是0;如果是写线程先执行就是6;

    如有问题请指正。