并发编程|Synchronized相关面试题

并发编程

 

前言

并发编程在面试 过程肯定会问到的,但是这块准备起来没有之前知识点繁琐

并发编程考察深度知识比较多,那这小节我们整理下关于Synchronized的知识点

Synchronized 相关问题


1.Synchronized 用过吗,其原理是什么?

这是一道 Java 面试中几乎百分百会问到的问题,因为没有任何写过并

发程序的开发者会没听说或者没接触过 Synchronized。
Synchronized 是由 JVM 实现的一种实现互斥同步的一种方式,如果
你查看被 Synchronized 修饰过的程序块编译后的字节码,会发现,被
Synchronized 修 饰 过 的 程 序 块 , 在 编 译 前 后 被 编 译 器 生 成
了 monitorenter 和 monitorexit 两个字节码指令。
这两个指令是什么意思呢?
在虚拟机执行到 monitorenter 指令时,首先要尝试获取对象的锁:
如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的
计数器 +1;当执行 monitorexit 指令时将锁计数器 -1;当计数器为 0
时,锁就被释放了。
如果获取对象失败了,那当前线程就要阻塞等待,直到对象锁被另外一个
线程释放为止。
Java 中 Synchronize 通过在对象头设置标记,达到了获取锁和释放锁
的目的。


2.你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁?

“锁”的本质其实是 monitorenter 和 monitorexit 字节码指令的一个
Reference 类型的参数,即要锁定和解锁

猜你喜欢

转载自blog.csdn.net/zzhuan_1/article/details/104001900