JDK中有哪些锁?

144 阅读1分钟

面试题:JDK中有哪些锁? 各有何特点?

答案:有sychronized关键字,ReentrantLock可重入锁,ReadWriteLock读写分离锁

sychronized可以修饰方法或代码块,它是可重入锁,也是非公平锁。

  • 当synchronized作用于普通方法是,锁对象是this;
  • 当synchronized作用于静态方法是,锁对象是当前类的Class对象;
  • 当synchronized作用于代码块时,锁对象是synchronized(obj)中的这个obj。

一般而言,synchronized使用的锁对象是存储在Java对象头里的。

ReentrantLock 相对sychronized 功能更加强大和灵活,也是一个可重入锁,通过lock()方法加锁,unlock()方法解锁,解锁方法必须要放在finally块中释放!通过构造方法传入不同的参数来标记是否为公平锁。

公平锁是公平的,不会产生饥饿现象,但是性能比非公平锁低。

synchronized可以和wait/notify配合实现线程间通信。ReentrantLock也可以和Condition配合达到一样的效果,甚至可以实现更多的功能。

ReadWriteLock读写锁ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁,读锁使用共享模式;写锁使用独占模式。同时,读写锁之间也是互相排斥的,就是说,当一个线程获取读锁后,另外一个线程正在获取写锁时,必须等读锁释放才行。

Java并发库中ReetrantReadWriteLock实现了ReadWriteLock接口并添加了可重入的特性。