扫码关注公众号

java语言考点之synchronized和volatile
03-15
214观看
01

既然 volatile 能够保证线程间的变量可见性,是不是就意味着基于 volatile 变量的运算就是并发安全的?

volatile修饰的变量在各个线程的工作内存中不存在一致性的问题(在各个线程工作的内存中,volatile修饰的变量也会存在不一致的情况,但是由于每次使用之前都会先刷新主存中的数据到工作内存,执行引擎看不到不一致的情况,因此可以认为不存在不一致的问题),但是java的运算并非原子性的操作,导致volatile在并发下并非是线程安全的。

来自:并发和同步-synchronized、volatile(后续会删除)
02

如何让 Java 的线程彼此同步?

1.synchronized2.volatile3.ReenreantLock4.使用局部变量实现线程同步

来自:并发和同步-锁的定义和分类
03

多线程中 synchronized 锁升级的原理是什么?

synchronized锁升级原理:在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm让其持有偏向锁,并将threadid设置为其线程id,再次进入的时候会先判断threadid是否与其线程id一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了synchronized锁的升级。锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在Java6之后优化synchronized的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。

来自:并发和同步-synchronized、volatile(后续会删除)
课程
专栏
JAVA多线程之volatile 与 synchronized 的比较
要想理解volatile关键字,得先了解下JAVA的内存模型
博客园
volatile
synchronized
volatile 与 synchronized 区别
用一句话概括volatile,它能够使变量在值发生改变时能尽快地让其他线程知道。
博客园
volatile
synchronized
synchronized和ReentrantLock的区别
了解一下synchronized和ReentrantLock两个同步锁的区别。
简书
synchronized
java语言-并发和同步-synchronized、volatile(后续会删除)
3专栏
1课程
4 试题