自己实战整理面试题--锁(带答案,不断更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w372426096/article/details/83754493

java有哪些锁?

Synchronized 和 ReentrantLock?

1、synchronized是重量级锁? 从JDK 1.5 到 JDK 1.6 有一个高效并发方面的重要改进,HotSpot虚拟机开发团队在这个版本中花费了很大的精力去对Java中的锁进行优化(synchronized),如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。这些技术都是为了在线程之间更高效的共享数据,以及解决竞争问题。 在使用synchronized的时候,会有一个顺序,这个顺序叫做膨胀。会首先使用偏向锁尝试、然后使用轻量级锁、最后才会尝试重量级锁。

2、concurrent包为啥不被称之为重量级锁 concurrent包底层确实如你所说,依赖LockSupport 提供park()和unpark()方法实现的。 但是,这并不是说只要使用concurrent包中的类,那么就会直接使用park()和unpark()。上面还有一层重要的东西,那就是CAS。

3、 所以结论是。

synchronized和concurrent包,在底层和操作系统交互时,都是使用mutex lock的。但是,二者都会尝试各种锁优化来尽量避免走到这最后一步。 synchronized使用的是如锁膨胀等技术。 concurrent包则使用的是CAS技术。 在早期,synchronized没做优化的时候,我们称之为重量级锁。后面有了优化手段之后,我们还是沿用老的叫法,最终会膨胀成重量级锁。 而在concurrent包刚出来的时候,就采用了CAS等技术做了优化,所以,和那时候的synchronized相比,他就没有被称之为重量级锁了。

Synchronized 和 ReentrantLock 锁机制,怎么判断重入锁的,会不会是死锁?

死锁
分布式锁
公平锁和非公平锁
Java 读写锁
读写锁设计主要解决什么问题?
(Java后端技术公众号)
说说线程安全问题,什么是线程安全,如何保证线程安全
重入锁的概念,重入锁为什么可以防止死锁
产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)
如何检查死锁(通过jConsole检查死锁)
volatile 实现原理(禁止指令重排、刷新内存)
synchronized 实现原理(对象监视器)
synchronized 与 lock 的区别
AQS同步队列
CAS无锁的概念、乐观锁和悲观锁

http://www.cnblogs.com/qjjazry/p/6581568.html

什么是ABA问题,出现ABA问题JDK是如何解决的

http://cmsblogs.com/?p=2235
常见的原子操作类
乐观锁的业务场景及实现方式
Java 8并法包下常见的并发类
偏向锁、轻量级锁、重量级锁、自旋锁的概念
可参考:《Java多线程编程核心技术》
nginx的请求转发算法,如何配置根据权重转发
static加锁
可重入的读写锁,可重入是如何实现的?
synchronized加在方法上用的什么锁
可重入锁中的lock和trylock的区别

猜你喜欢

转载自blog.csdn.net/w372426096/article/details/83754493