线程安全之可见性问题

JMM对于同步规则的定义:

  • 对volatile变量v的写入,与所有其他线程后续对v的读同步
  • 对监视器m的解锁,与所有后续操作对于m的加锁同步
    理解:后续的加锁操作内容,能够看到解锁前的线程对于共享变量的修改。
  • 对每个属性写入默认值(0,false,null),与每个线程对其进行的操作同步
    理解:一个线程创建了有默认值的对象,后面其他线程可能读不到这个对象设置的默认值,但一定会读到初始值,而不会读到乱码。
  • 启动线程的操作与线程中的第一个操作同步
    理解:类似于说明第一个操作与创建在堆的线程的state状态的值同步
  • 线程T2的最后操作与T1发现T2已经结束同步
  • 如果线程T1中断了T2,那么T1的中断操作与其他所有线程发现T2被中断了同步
    理解:如T2.interrupt(),则其他线程的Sleep方法会感知到

happens-before原则:
描述两个有冲突的动作之间的顺序(如线程间操作),JVM需要实现happens-before规则
该原则的内容可以百度

线程间操作:

  • read
  • write
  • lock
  • unlock
  • 外部文件操作(如JVM进程外的文件读写操作)

JMM对于Final的处理:

  1. 在构造函数中设置final变量的值,线程一定看到该字段正确的构造版本,而不是字段的初始值(null等)
  2. 在构造函数中设置final变量的值后,发生读取,则会看到final字段分配的值,否则看到初始值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值