慕瓜0476209
2019-11-24 00:49
使用synchronized实现可见性时,在wriite和read方法上都加上了这个关键字,但是main方法中启动的是两个线程,如果参数为false的先执行,那么结果就是0,程序的运行结果中确实还是可能是6或者0,请老师帮忙确认下
synchronized分为对象锁和类锁。加在非静态方法上的锁是对象锁,由于main中new了两个实例,write和read方法是不同对象,因此两个锁不是同一把锁,不具有互斥性。
所以出现0和6的原因就是出现在处理器的重排序原因。两个线程同时启动,但是先执行哪个线程是有处理器决定的。如果是读线程先执行,结果就是0;如果是写线程先执行就是6;
如有问题请指正。
细说Java多线程之内存可见性
55908 学习 · 74 问题
相似问题