并发编程的三大特性之可见性

简介: 并发编程的三大特性之可见性

可见性

  • CPU计算数据由于从内存中读取数据过慢,于是在CPU内部建立了L1,L2,L3三级缓存来直接让CPU从自身的缓存中读取数据。从而提高计算速度。
  • 每一个线程有自己单独的CPU三级缓存,遵循MESI协议

解决可见性的方法

  • 使用volatile关键字

  • volatile的内存语义
  • 针对volatile属性被写入,JMM会将当前线程的CPU缓存的数据及时刷新到主内存中
  • 针对volatile属性被读出,JMM会将当前线程CPU中的缓存置为无效,需要从主内存中重新获取值
  • 使用synchronized锁
    添加在这里是会失败的得不到预期的效果。



  • 使用Lock锁
  • Lock锁的实现是基于volatile实现,在内部进行加锁和释放锁,对一个由volatile修饰的state变量做加减操作。

  • final关键字实现
    final修饰的属性不能被修改
目录
相关文章
|
17天前
|
缓存 安全 Java
多线程的三大特性:原子性、可见性和有序性
多线程的三大特性:原子性、可见性和有序性
18 0
|
23天前
|
Java
并发编程的三大特性之原子性
并发编程的三大特性之原子性
12 0
|
23天前
|
安全 Java
并发编程的三大特性之有序性
并发编程的三大特性之有序性
10 0
|
10月前
|
存储 缓存 SpringCloudAlibaba
JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性
在当今高流量、高并发的互联网业务场景下,**并发编程技术**显得尤为重要,不管是哪一门编程语言,掌握并发编程技术是个人进阶的必经之路。时隔一个半月没有写技术博客文章,有点生疏了。。。闲话少叙,接下来我将围绕并发编程知识点进行总结讲解,这里从并发编程入门开始,讲述Java内存模型和并发的三大特性。
119 1
JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性
|
9月前
|
安全 Java 数据库
【并发编程特性】并发编程特性之五种特性的探讨
【并发编程特性】并发编程特性之五种特性的探讨
65 0
|
10月前
|
缓存 安全 Java
Java并发编程三大特性
导致并发程序出现问题的根本原因
77 0
|
10月前
|
存储 缓存 安全
深入学习 volatile 的特性
深入学习 volatile 的特性
123 0
深入学习 volatile 的特性
|
存储 缓存 安全
volatile特性及实现原理
一个volatile变量自身具有以下三个特性: 1、可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。 2、有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。
60 0
|
缓存 Java 编译器
Java并发编程(实战):如何解决可见性和有序性问题
Java 内存模型这个概念,在职场的很多面试中都会考核到,是一个热门的考点,也是一个人并发水平的具体体现。原因是当并发程序出问题时,需要一行一行地检查代码,这个时候,只有掌握 Java 内存模型,才能慧眼如炬地发现问题。 什么是 Java 内存模型? 你已经知道,导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了。
|
SQL 缓存 安全
《JUC并发编程 - 高级篇》04 -共享模型之内存 (Java内存模型 | 可见性 | 有序性 )(下)
《JUC并发编程 - 高级篇》04 -共享模型之内存 (Java内存模型 | 可见性 | 有序性 )
《JUC并发编程 - 高级篇》04 -共享模型之内存 (Java内存模型 | 可见性 | 有序性 )(下)