Bootstrap

JAVA锁机制常见面试题

synchronized与Lock的区别?

  • synchronied 是关键字, Lock 是接口
  • synchronied可以修饰方法,代码块,Lock只能修饰代码块
  • synchronized自动加锁解锁,lock 需要手动加锁解锁
  • synchronied产生死锁不能主动释放锁,死锁无法解决,Lock有unLock()方法可以解锁,发生死锁后可以解决

synchronized锁的底层实现机制?

synchronized使用的锁对象类型存储在Jvm对象头里的标记字段中,处于那种锁状态由jvm结构中标志位决定: 无锁:001 偏向锁: 101 自旋锁 00 重量级锁10。synchronied根据线程竞争程度分为:无锁、偏向锁、自旋锁、重量级锁 jdk1.6之前只有重量级锁。

为什么会有可见性问题:多线程操作内同一变量是,不同线程是在自己的工作内存进行变量的操作,在处理结束后同步到主存中。

为什么会有乱序问题: 指令重排序是编译器和处理器为了高效对程序进行优化的手段,它只能保证程序执行的结果时正确的,但是无法保证程序的操作顺序与代码顺序一致。

volatile关键字:

volati

;