说一下java中常用的锁
时间: 2024-08-21 08:03:19 浏览: 45
在 Java 中,锁是一种同步机制,用于控制对共享资源的访问以避免并发编程中的数据竞争。以下是几种常见的 Java 锁:
1. **synchronized关键字**:
- `synchronized` 是最基础的同步机制,可以作用于方法(代码块)或整个类,通过 `this` 关键字锁定实例,或者锁住特定的对象(例如 static 方法会锁住类本身)。当一个线程进入同步代码块或方法时,它获得了锁,其他等待的线程则会被阻塞。
2. **ReentrantLock**:
- `java.util.concurrent.locks.ReentrantLock` 是一种可重入锁,提供比 `synchronized` 更强的灵活性。它可以显式获取、释放锁,并允许中断等待锁。还支持条件变量,可以配合使用。
3. **Semaphore**:
- `java.util.concurrent.Semaphore` 是一个信号量,表示同时可以访问的线程数。它限制了进入某个区域的线程数量,而不是锁定整个资源。
4. **CountDownLatch/CountDownLATCH**:
- 这些是专门用于计数的工具,`CountDownLatch` 用于一个线程等待其他线程完成,而 `CyclicBarrier` 则是在一组线程达到某个“屏障”位置后再继续执行。
5. **CyclicBarrier/CyclicBarrier**:
- 当所有参与的线程到达特定点时,它们会一起暂停并继续执行。这对于同步多步操作非常有用。
6. **ReadWriteLock**:
- `java.util.concurrent.locks.ReadWriteLock` 提供了读写分离的锁,允许多个读操作并发进行,但在写操作期间阻止读取和写入。
使用锁时要注意死锁和性能问题,以及选择合适的锁策略以平衡并发效率和资源安全性。
阅读全文