进程与线程

Java线程

共享模型之管程

线程共享变量

Java中的锁

Java 中的锁主要有以下几种:

  1. synchronized:synchronized 是 Java 中最基本的锁,它是一种悲观锁,也称为互斥锁。synchronized 可以用来修饰方法或代码块,使用 synchronized 修饰的方法或代码块在同一时刻只能被一个线程执行。synchronized 的使用方式如下:

    public synchronized void method() {
        // synchronized 修饰的方法体
    }
    
    public void method2() {
        synchronized (this) {
            // synchronized 修饰的代码块
        }
    }
    
    
  2. ReentrantLock:ReentrantLock 是 Java 中的一种可重入锁,它也是一种悲观锁,可以替代 synchronized 实现线程同步。ReentrantLock 的使用方式如下:

    ReentrantLock lock = new ReentrantLock();
    lock.lock(); // 获取锁
    try {
        // 执行同步代码块
    } finally {
        lock.unlock(); // 释放锁
    }
    
    
  3. ReadWriteLock:ReadWriteLock 是一种读写锁,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。ReadWriteLock 的使用方式如下:

    ReadWriteLock lock = new ReentrantReadWriteLock();
    lock.readLock().lock(); // 获取读锁
    try {
        // 执行读操作
    } finally {
        lock.readLock().unlock(); // 释放读锁
    }
    
    lock.writeLock().lock(); // 获取写锁
    try {
        // 执行写操作
    } finally {
        lock.writeLock().unlock(); // 释放写锁
    }
    
    
  4. StampedLock:StampedLock 是 Java 8 新增的一种锁机制,它是一种乐观锁,可以实现比 ReentrantLock 更高效的读写锁。StampedLock 的使用方式如下:

    StampedLock lock = new StampedLock();
    long stamp = lock.readLock(); // 获取读锁
    try {
        // 执行读操作
    } finally {
        lock.unlockRead(stamp); // 释放读锁
    }
    
    long stamp2 = lock.writeLock(); // 获取写锁
    try {
        // 执行写操作
    } finally {
        lock.unlockWrite(stamp2); // 释放写锁
    }
    
    

以上是 Java 中主要的几种锁,使用时需要根据具体情况选择合适的锁机制。