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

Posted 激流勇进、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了细说Java多线程之内存可见性相关的知识,希望对你有一定的参考价值。

可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到。

共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线
程的共享变量。

Java内存模型

 

 

 

线程对共享变量操作的规定:

共享变量可见性实现的原理:


可见性的必要条件:


可见性的实现方式:(final也可以)


线程执行互斥代码的过程:


重排序的概念


as-if-serial的概念:


导致共享变量在线程间不可见的原因:


可见性分析:



当一个线程访问object的一个sysnchronized(this)同步代码块时,其他线程对object中所有其他synchronized(this)同步代码块的访问会被阻塞

volatile实现可见性:


volatile不能实现原子性的分析:


保证自增操作原子性的解决方案:

ReentrantLock的用法:



volatile适用场合:


synchronized与volatile的比较

 

 

 

以上是关于细说Java多线程之内存可见性的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE学习53:细说多线程之内存可见性

多线程内存可见性

Java多线程之内存可见性

java线程-java多线程之可见性

多线程编程 之java内存模型(JMM)可见性有序性问题解决方案

Java多线程安全可见性和有序性之Volatile