标签:内存模型 app 指令重排序 安全性 代码 清空 标记 状态 并发
要理解java内存模型以及一些处理高并发的技术手段,理解一些主要的硬件知识是必须的。
一个主要CPU运行计算的步骤例如以下:
CPU多级缓存:缓存一致性,乱序执行优化
缓存一致性:eg.(i初值为1,两个线程对i进行加1操作)两个线程分别读取i的值存入各自所在的CPU的高速缓存当中,然后线程1进行加1操作,然后把i的最新值1写入到内存。此时线程2的高速缓存当中i的值还是0,进行加1操作之后,i的值为1,然后线程2把i的值写入内存。这样最终的到的结果就是1,而不是2。
解决方法:
java内存模型:JMM规定,抽象结构,同步等八种操作及规则
java并发的优势和风险
优势:
缺点:
原子性:(Atomic 包、cas、syncronized、lock)
synchronized同步锁:修饰4种对象(不能继承):不可中断锁,适合竞争不激烈,可读性好
JMM关于synchronized的两条规定:
线程解锁前,必须把共享变量的最新值刷新到主内存
线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值。
修饰区域:
lock:可中断锁,多样化同步,竞争激烈时能维持常态
导致共享变量在线程间不可见的原因是:1.线程交叉执行2.重排序结合线程交叉执行3.共享变量更新后的值没有在工作内存与主存间及时更新
synchronized
volitale关键字(作为状态标记量)特点:1.可见性2禁止指令重排序(加入内存屏障)
标签:内存模型 app 指令重排序 安全性 代码 清空 标记 状态 并发
原文地址:https://www.cnblogs.com/nickup/p/9694701.html