jvm高效并发12 13

1.原子性:一个操作要么执行完,要么不执行。

2.可见性:线程修改数据以后,其他线程应该立马可见。

3.有序性(指令重排 影响多线程)

volatile的作用

        1.当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值(保证可见性)。

        2.保证一定的“有序性”

例如 volatile int i=10;

        线程一: i++;-》》》》》取i,入栈,自增,出栈,写入主存

        线程二:i++;

线程一,读取10并且入栈准备计算,中断,线程二运行修改i=11;(此时通知线程一无效,但是入栈了,线程一无反应)线程一继续运行得11写入   最终结果为11(错误!!!!)

内存间交互操作

             lock   把变量标记为一个线程独占

            unlock  解锁

             read  从主存中读取数据到工作内存

             load  把获取的变量值放入工作内存的变量副本中

             use 把变量的值传递给执行引擎(入栈)

             assign  作用于工作内存的变量,把从执行引擎获取的值赋给工作内存变量

             store把变量值从工作内存传递给主存

             write 作用于主存变量,把store传递的变量赋值给主存变量

 

hanppens-before规则

程序次序规则:一个线程内操作有序。

管程锁定规则:对于同一个锁,unlock先于lock

volatile规则:对于一个被修饰的变量,write先于read

线程启动规则:start()先行发生于此线程的每一个动作

线程终止规则:线程所有操作先行发生于对此线程的终止检测。join(),isAlive()

线程中断规则:对线程的interrupt()方法调用先行发生于被中断线程的代码检测到中断事件的发生

&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值