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

来源:3-3 synchronized实现可见性代码(中)

慕瓜0476209

2019-11-24 00:49

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

写回答 关注

1回答

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

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

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

    如有问题请指正。

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55910 学习 · 74 问题

查看课程

相似问题