扫码关注公众号

多线程和并发之 synchronized、volatile
12-06
238观看
01

Volatile和Synchronized四个不同点:

1粒度不同,前者针对变量,后者锁对象和类

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

synchronized这个关键字有什么作用?

每个Java对象都有一个关联的monitor,使用synchronized时JVM会根据使用环境找到对象的monitor,根据monitor

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

关于 volatile 的描述哪些错误的

正确答案是A、B、C、Dvolatile不能保证程序执行的原子性以及只能一定程度上保证有序性(能禁止指令重排序)。但是这里只能保证volatile所修饰的变量之前的程序不会在该变量之后执行,该变量之后的代码不会在变量之前执行。明确的说,volatile跟多线程无关,它不是一种同步手段,用它来实现线程安全是错的。

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

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

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

来自:并发和同步-synchronized、volatile(后续会删除)
专栏
java语言-并发和同步-synchronized、volatile(后续会删除)
3专栏
0课程
4 试题