Java 中有哪些锁?

· 约 5 分钟读完 · 第 92 / 274 章

推荐答案

在Java中,锁主要分为以下几种:

  1. 内置锁(Synchronized):通过synchronized关键字实现,可以用于方法或代码块。
  2. 显式锁(ReentrantLock):java.util.concurrent.locks.ReentrantLock类提供的锁,提供了比synchronized更灵活的锁机制。
  3. 读写锁(ReentrantReadWriteLock):java.util.concurrent.locks.ReentrantReadWriteLock类提供的锁,允许多个读线程同时访问,但写线程独占锁。
  4. StampedLock:java.util.concurrent.locks.StampedLock类提供的锁,提供了乐观读锁、悲观读锁和写锁三种模式。
  5. 条件锁(Condition):java.util.concurrent.locks.Condition接口提供的锁,通常与ReentrantLock配合使用,用于线程间的协调。
  6. 分布式锁:通过第三方工具(如Redis、Zookeeper等)实现的锁,用于分布式系统中的并发控制。

本题详细解读

1. 内置锁(Synchronized)

内置锁是Java中最基本的锁机制,通过synchronized关键字实现。它可以用于方法或代码块,确保同一时间只有一个线程可以执行被锁定的代码。

2. 显式锁(ReentrantLock)

ReentrantLock是java.util.concurrent.locks包中的一个类,提供了比synchronized更灵活的锁机制。它支持公平锁和非公平锁,并且可以中断等待锁的线程。

3. 读写锁(ReentrantReadWriteLock)

ReentrantReadWriteLock允许多个读线程同时访问,但写线程独占锁。这种锁适用于读多写少的场景,可以提高并发性能。

4. StampedLock

StampedLock是Java 8引入的一种新的锁机制,提供了乐观读锁、悲观读锁和写锁三种模式。乐观读锁在读操作较多的情况下可以提高性能。

5. 条件锁(Condition)

Condition接口通常与ReentrantLock配合使用,用于线程间的协调。它提供了await()、signal()和signalAll()等方法,类似于Object的wait()、notify()和notifyAll()。

6. 分布式锁

分布式锁用于分布式系统中的并发控制,通常通过第三方工具(如Redis、Zookeeper等)实现。分布式锁可以确保在分布式环境中同一时间只有一个节点可以执行某个操作。