java synchronized实现可见性
来源:互联网 发布:手机淘宝怎么秒杀东西 编辑:程序博客网 时间:2024/05/21 10:54
synchronized大家知道的最多的是其在java语言层面实现了同步锁,但是很少会注意到,synchronized同volatile,也实现了线程间的可见性。
JMM关于synchronized的两条规定:
1. 线程解锁时,必须将其工作内存中的共享变量的值刷新到主内存
2. 线程加锁时,必须清空其工作内存中共享变量的值,从而使用共享变量时,需要从主内存中拷贝共享变量
因此,线程执行synchronized代码段时,步骤如下:
1. 获取互斥锁
2. 清空线程的工作内存
3. 从主内存拷贝共享变量到工作内存
4. 执行代码
5. 将共享变量刷新到主内存
6. 释放锁
另外,volatile与synchronized的区别如下:
1. volatile是不需要加锁的,因此比synchronized更加轻量级,不会阻塞线程
2. 从内存可见性角度来看,volatile的读相当于加锁(清空工作内存,从主内存中拷贝共享变量),volatile的写相当于解锁(将线程工作内存中的共享变量刷新到主内存)
3. volatile只是保证可见性,不保证原子性,而synchronized既保证可见性又保证原子性
0 0
- java synchronized实现可见性
- synchronized实现可见性过程
- 浅谈Java多线程(synchronized实现可见性)
- Java之多线程内存可见性_2(synchronized实现可见性代码)
- Java内存可见性-synchronized和volatile
- Java多线程内存可见性实现 synchronized (java 学习笔记)
- java学习12--线程的可见性,synchronized,volatile使用
- Java多线程之内存可见性——synchronized
- java多线程之内存可见性-synchronized、volatile
- java多线程之内存可见性-synchronized、volatile
- JAVA学习笔记-----可见性(synchronized/volatile)
- Java之多线程内存可见性_2(synchronized可见性原理)
- Java并发编程之九:实现内存可见性的两种方法比较:synchronized和Volatile
- Java实现内存可见性的两种方法比较:synchronized 和 Volatile以及涉及到锁的剖析
- Synchronized的内存可见性
- java线程内存可见性-实现方式
- java实现多线程内存可见性
- 关于synchronized是否能保证可见性。
- Action获取表单提交数据+向jsp传递数据【重要】
- 网络流24题 05圆桌聚餐
- 以zybpub新建csdn帐号,命名来源于我注册的域名zyb.pub。
- Docker实践2
- JAVA入门
- java synchronized实现可见性
- 深度学习流行网络与数据集
- 软件测试-学习笔记(一)
- 算法训练 方格取数
- Java 封装
- 反射拿到该类的实例对象
- T-SQL语句整理
- LeetCode-Algorithm2 C++的链表
- 宏汇编实现字母大小写的转换