java 有哪些锁

Java 中的锁可以分为几种不同的类型,每种锁都有其特定的用途和使用场景。以下是一些常见的锁类型:

1. **synchronized 关键字**:
   - 这是 Java 中最基本的同步机制,可以用来同步线程对共享资源的访问。

2. **ReentrantLock(可重入锁)**:
   - `java.util.concurrent.locks.ReentrantLock` 提供了一种比 `synchronized` 更灵活的锁定机制,支持尝试非阻塞获取锁、可中断的锁获取、超时获取锁以及公平性(按照线程请求锁的顺序来获取锁)。

3. **ReadWriteLock(读写锁)**:
   - `java.util.concurrent.locks.ReadWriteLock` 允许多个线程同时读取同一资源,但在写入时需要独占访问。

要注意写线程饥饿问题,可以通过公平锁解决,但是会降低性能。所以在jdk1.8引入了StampedLock

读写锁在读写分离数据库架构中保证了数据的一致性。

4. **StampedLock**:
   - 一个相对于 `ReadWriteLock` 的改进版本,提供了乐观读锁和悲观写锁,可以减少锁争用。

 StampedLock是不可重入锁

5. **CountDownLatch(倒计时锁)**:
   - 允许一个或多个线程等待一组操作在其他线程中完成。

public class TestCountDownLatch {

    public static void main(String[] args) throws InterruptedException {
        Object lock = new Object();
        CountDownLatch countDownLatch = new CountDownLatch(5);
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        System.out.println("游戏5秒后开始执行");
                        lock.notifyAll();
                        lock.wait();
                        countDownLatch.await();
                        System.out.println("游戏正式开始。。。。。");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        System.out.println("-------------------");
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    for (int i = 5; i &
posted @ 2024-08-26 10:48  在线电影制作人  阅读(6)  评论(0)    收藏  举报  来源