ReadWriteLock 读和写锁

public class ReadWriteLockDemo {

	public static void main(String[] args) {
		final Queue q = new Queue();
		for (int i = 0; i < 3; i++) {
			new Thread(new Runnable(){
				@Override
				public void run() {
					while (true) {

						q.set(new Random().nextInt(1000));
					}
				}

			}).start();
			new Thread(new Runnable() {
				@Override
				public void run() {
					while (true) {

						q.read();
					}
				}
			}).start();
		}
	}
}
class Queue{
	private int data;
	private ReadWriteLock rwl = new ReentrantReadWriteLock();
	public void set(int data){
		rwl.readLock().lock();
		this.data = data;
		try {
			System.out.println(Thread.currentThread().getName()
					+ " ready to write data");
			Thread.sleep(1000);
			System.out.println(Thread.currentThread().getName() + " 写入数据 "
					+ data);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			rwl.readLock().unlock();
		}
	}
	public void read() {
		rwl.writeLock().lock();
		try {
			System.out.println(Thread.currentThread().getName()
					+ " ready to read data");
			Thread.sleep(1000);
			System.out.println(Thread.currentThread().getName() + " 获取dao数据 "
					+ data);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			rwl.writeLock().unlock();
		}
	}
}

ReadWriteLock 读和写锁

时间: 2024-10-01 02:51:59

ReadWriteLock 读和写锁的相关文章

ReadWriteLock: 读写锁

ReadWriteLock: 读写锁 ReadWriteLock: JDK1.5提供的读写分离锁,采用读写锁分离可以有效帮助减少锁竞争. 特点: 1).使用读写锁.当线程只进行读操作时,可以允许多个线程同时读 2).写写操作,读写操作间依然需要相互等待和持有锁. 一).使用读写锁与使用重入锁进行读读写操作 开启200个线程,测试读写锁和重入锁的读效率. 使用重入锁进行读写操作:ReentrantLock_Rw import java.util.concurrent.locks.Reentrant

ReadWriteLock 读写锁(读书笔记)

读写分离锁可以有效的帮助减少锁的竞争,提升系统的效率, 读-读不互斥 读读之间不阻塞 读-写互斥 读阻塞写,写也会阻塞读 写-写互斥 写写阻塞 在系统中,读操作次数远远大于写操作,则读写锁就可以发挥最大的功效,提升系统的性能. public class ReadWriteLockDemo { private static Lock lock = new ReentrantLock(); private static ReentrantReadWriteLock readWriteLock = n

java多线程 -- ReadWriteLock 读写锁

写一条线程,读多条线程能够提升效率. 写写/读写 需要"互斥";读读 不需要互斥. ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作.只要没有 writer,读取锁可以由多个 reader 线程同时保持.写入锁是独占的. ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁.对于读取操作占多数的数据结构. ReadWriteLock 能提供比独占锁更高的并发性.而对于只读的数据结构,其中包含的不变性可以完全

上传程序Dictionary 字典 哈希--多读一写锁ReaderWriterLock

//上传程序Dictionary 字典 哈希 /// <summary> /// 车辆控制信息哈斯表,Key是终端号,Value是车辆信息控制对象 /// </summary> private Dictionary<string, MsgObject> _MsgObjectHashMap = new Dictionary<string, MsgObject>(); public Dictionary<string, MsgObject> MsgO

读写锁之ReadWriteLock

你可能有这样一个疑问,Java SDK 并发包里为什么还有很多其他的工具类呢?原因很简单:分场景优化性能,提升易用性. 接下来我们聊聊,针对读多写少这种并发场景,Java SDK 并发包提供了读写锁——ReadWriteLock 读写锁,并不是 Java 语言特有的,而是一个广为使用的通用技术,所有的读写锁都遵守以下三条,尤其注意第三条,之后我们讲跟其他锁的对比会用到. 基本原则: 1. 允许多个线程同时读共享变量: 2.只允许一个线程写共享变量: 3. 如果一个写线程正在执行写操作,此时禁止读

Java并发程序设计(15)并发锁之读写锁(续二)写锁降级

1.1.1. 读写锁应用之三写锁降级 ReentrantReadWriteLock还具有写锁降级的特点,而这跟可重入性有一些关系. (1)持有写锁时可以降级为读锁. (2)持有读锁时不能升级为写锁. ReentrantReadWriteLock和ReentrantLock相似的是都有一个特点,就是可重入.可重入指已经获取到锁的线程可以再次获取锁,保证lock和unlock的次数相同即可. package com.test.concurrence; import java.util.Random;

深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)[转]

这一节主要是谈谈读写锁的实现. 上一节中提到,ReadWriteLock看起来有两个锁:readLock/writeLock.如果真的是两个锁的话,它们之间又是如何相互影响的呢? 事实上在ReentrantReadWriteLock里锁的实现是靠java.util.concurrent.locks.ReentrantReadWriteLock.Sync完成的.这个类看起来比较眼熟,实际上它是AQS的一个子类,这中类似的结构在CountDownLatch.ReentrantLock.Semapho

深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)

这一节主要是谈谈读写锁的实现. 上一节中提到,ReadWriteLock看起来有两个锁:readLock/writeLock.如果真的是两个锁的话,它们之间又是如何相互影响的呢? 事实上在ReentrantReadWriteLock里锁的实现是靠java.util.concurrent.locks.ReentrantReadWriteLock.Sync完成的.这个类看起来比较眼熟,实际上它是AQS的一个子类,这中类似的结构在CountDownLatch.ReentrantLock.Semapho

读写锁 ReentrantReadWriteLock

一.读写锁 ReadWriteLock概念特点读写锁维护了一对相关的锁,一个用于只读操作,一个用于写入操作.只要没有writer,读取锁可以由多个reader线程同时保持.写入锁是独占的. 互斥锁[ReetrantLock]一次只允许一个线程访问共享数据,哪怕进行的是只读操作:读写锁[ReadWriteLock]允许对共享数据进行更高级别的并发访问:对于写操作,一次只有一个线程(write线程)可以修改共享数据,对于读操作,允许任意数量的线程同时进行读取.writer可以获取读取锁,但reade