Java多线程中读写锁ReadWriteLock的使用

本文探讨了Java中的读写锁(ReadWriteLock)如何应用于多线程场景,特别是在模拟Hibernate缓存时的作用。读锁允许多线程并发读取数据,而写锁确保写操作的互斥性,保证数据一致性。
摘要由CSDN通过智能技术生成

读写锁分为读锁和写锁,多个读锁之间是不需要互斥的(读操作不会改变数据,如果上了锁,反而会影响效率),写锁和写锁之间需要互斥,也就是说,如果只是读数据,就可以多个线程同时读,但是如果你要写数据,就必须互斥,使得同一时刻只有一个线程在操作。


案例:三个线程读数据,三个线程写数据。

class ReadWrite {
	/* 共享数据,只能一个线程写数据,可以多个线程读数据 */
	private Object data = null;
	/* 创建一个读写锁 */
	ReadWriteLock rwlock = new ReentrantReadWriteLock();

	/**
	 * 读数据,可以多个线程同时读, 所以上读锁即可
	 */
	public void get() {
		/* 上读锁 */
		rwlock.readLock().lock();

		try {
			System.out.println(Thread.currentThread().getName() + " 准备读数据!");
			/* 休眠 */
			Thread.sleep((long) (Math.random() * 1000));
			System.out.println(Thread.currentThread().getName() + "读出的数据为 :" + data);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			rwlock.readLock().unlock();
		}

	}

	/**
	 * 写数据,多个线程不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值