Java Lock 锁如何实现读写锁

发布时间:2025-02-09 02:16:07 作者:小樊
来源:亿速云 阅读:107

在 Java 中,读写锁可以通过 ReentrantReadWriteLock 类来实现。这个类提供了两个锁:一个用于写操作,另一个用于读操作。读操作可以并发执行,而写操作是独占的。这样可以提高性能,因为读操作通常比写操作更频繁。

下面是一个简单的示例,展示了如何使用 ReentrantReadWriteLock 实现读写锁:

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockExample {
    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    private int data = 0;

    // 写操作
    public void writeData(int newData) {
        readWriteLock.writeLock().lock(); // 获取写锁
        try {
            data = newData;
            System.out.println("Data updated to: " + data);
        } finally {
            readWriteLock.writeLock().unlock(); // 释放写锁
        }
    }

    // 读操作
    public int readData() {
        readWriteLock.readLock().lock(); // 获取读锁
        try {
            System.out.println("Data read: " + data);
            return data;
        } finally {
            readWriteLock.readLock().unlock(); // 释放读锁
        }
    }

    public static void main(String[] args) {
        ReadWriteLockExample example = new ReadWriteLockExample();

        // 启动多个线程进行读操作
        for (int i = 0; i < 5; i++) {
            new Thread(() -> {
                while (true) {
                    example.readData();
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        // 启动一个线程进行写操作
        new Thread(() -> {
            while (true) {
                example.writeData(new Random().nextInt());
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

在这个示例中,我们创建了一个 ReadWriteLockExample 类,它包含一个整数 data 和两个方法:writeData()readData()writeData() 方法用于更新数据,而 readData() 方法用于读取数据。我们使用 ReentrantReadWriteLockwriteLock()readLock() 方法分别获取写锁和读锁。在操作完成后,我们在 finally 块中释放锁,以确保锁总是被释放。

main() 方法中,我们启动了多个线程进行读操作和一个线程进行写操作。读操作可以并发执行,而写操作是独占的。

推荐阅读:
  1. java中有几种锁
  2. Java中的锁种类介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java Lock 锁支持尝试获取锁吗

下一篇:Java Lock 锁在哪些场景下使用更合适

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》