考点介绍:
synchronized是Java多线程中经常使用的一个关键字。synchronized可以保证原子性、可见性、有序性。它包括两种用法:synchronized 方法和 synchronized 代码块。它可以用来给对象、方法或代码块进行加锁。volatile 是 JVM 提供的轻量级的同步机制。volatile 关键字可以保证并发编程三大特征(原子性、可见性、有序性)中的可见性和有序性,不能保证原子性。
答案详情解析和文章内容可扫下方海报二维码或点击链接即可查看!
一、考点试题
1、Volatile和Synchronized四个不同点:
解答:1 粒度不同,前者针对变量 ,后者锁对象和类
2 syn阻塞,volatile线程不阻塞......
2、synchronized这个关键字有什么作用?
解答:每个 Java 对象都有一个关联的 monitor,使用 synchronized 时 JVM 会根据使用环境找到对象的 monitor,根据 monitor 的状态进行加解锁的判断......
3、关于 volatile 的描述哪些错误的
A.能保证原子性(Atomicity)
B.能保证顺序性(Ordering)
C.能保证 volatile x=1 的原子性
D.能用来进行多线程同步
解答:正确答案是 A、B、C、D
volatile不能保证程序执行的原子性以及只能一定程度上保证有序性(能禁止指令重排序)......
4、多线程中 synchronized 锁升级的原理是什么?
解答:synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁......
二、考点文章
1、JAVA多线程之volatile 与 synchronized 的比较
要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下......
2、volatile 与 synchronized 区别
在Java中,为了保证多线程读写数据时保证数据的一致性,可以采用两种方式......
3、synchronized和ReentrantLock的区别
我们这篇文章来了解一下synchronized和ReentrantLock两个同步锁的区别......
移动端:https://m.xiaozhao.vip/dTopic/detail/1432
PC端:https://xiaozhao.vip/dTopic/detail/1432