为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

1 回答

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

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

如有问题请指正。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信