Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java 读写锁

作者:狂拽今生   发布日期:2026-07-19   浏览:35

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockExample {
    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
    private final ReentrantReadWriteLock.ReadLock readLock = rwl.readLock();
    private final ReentrantReadWriteLock.WriteLock writeLock = rwl.writeLock();
    private String data;

    // 读操作
    public String read() {
        readLock.lock();
        try {
            // 模拟读取数据的耗时操作
            Thread.sleep(100);
            return data;
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            readLock.unlock();
        }
    }

    // 写操作
    public void write(String newData) {
        writeLock.lock();
        try {
            // 模拟写入数据的耗时操作
            Thread.sleep(100);
            this.data = newData;
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            writeLock.unlock();
        }
    }
}

解释说明:

  1. ReentrantReadWriteLock:这是一个可重入的读写锁,允许多个线程同时读取数据(读锁),但在写操作(写锁)时会排他,确保数据的一致性。

  2. 读锁(ReadLock)

    • readLock.lock():获取读锁。多个线程可以同时持有读锁。
    • readLock.unlock():释放读锁。
  3. 写锁(WriteLock)

    • writeLock.lock():获取写锁。写锁是排他的,即同一时间只能有一个线程持有写锁,且在写锁被持有的时候,其他线程不能获取读锁。
    • writeLock.unlock():释放写锁。
  4. 读操作(read方法)

    • 在读取数据时,使用读锁来保证多个线程可以并发读取数据,但不会影响写操作的安全性。
  5. 写操作(write方法)

    • 在写入数据时,使用写锁来确保同一时间只有一个线程可以写入数据,并且在此期间不允许其他线程进行读或写操作。
  6. 异常处理

    • 使用try-finally块确保无论是否发生异常,锁都能被正确释放,避免死锁。
  7. 模拟耗时操作

    • 使用Thread.sleep(100)模拟读取和写入数据时的耗时操作,以更好地展示锁的行为。

上一篇:java list.sort

下一篇:java基础数据类型

大家都在看

java url decode

java判断是windows还是linux

java原始数据类型

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java常用的设计模式有哪些

java list 查找

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站