java中的同步锁(synchronized关键字、ReentrantLock类、ReadWriteLock类)

1.synchronized关键字:synchronized关键字是Java内置的同步机制之一,它可以用来修饰方法或代码块。当使用synchronized修饰方法时,该方法成为同步方法,只允许一个线程进入方法执行。而当使用synchronized修饰代码块时,需要指定一个对象作为锁,只有持有该锁的线程才能执行代码块。
public synchronized void synchronizedMethod() {
    // 同步的代码块
}

public void someMethod() {
    synchronized (lockObject) {
        // 同步的代码块
    }
}
2.ReentrantLock类:ReentrantLock是Java提供的Lock接口的具体实现类,它也可以实现线程的同步。与synchronized相比,ReentrantLock提供了更灵活的同步控制方式,并且支持公平锁和非公平锁。ReentrantLock需要手动获取锁和释放锁,因此需要在finally块中确保锁的释放。
Lock lock = new ReentrantLock();

public void someMethod() {
    lock.lock();
    try {
        // 同步的代码段
    } finally {
        lock.unlock();
    }
}
3.ReadWriteLock类:ReadWriteLock是Lock接口的另一个实现,它区分了读操作和写操作,允许多个线程同时读取共享资源,但在写操作时需要独占锁。ReadWriteLock有两个具体实现类:ReentrantReadWriteLock和StampedLock。
ReadWriteLock lock = new ReentrantReadWriteLock();

public void readMethod() {
    lock.readLock().lock();
    try {
        // 读取共享资源
    } finally {
        lock.readLock().unlock();
    }
}

public void writeMethod() {
    lock.writeLock().lock();
    try {
        // 写入共享资源
    } finally {
        lock.writeLock().unlock();
    }
}

注:除了上述方式外,Java还提供了其他同步机制,如Semaphore、CountDownLatch、CyclicBarrier等,它们可以根据具体的需求来选择合适的同步机制。无论使用哪种方式,同步控制的目的都是保证多个线程对共享资源的安全访问。

你可能感兴趣的:(java,开发语言,jvm)