`

ReentrantReadWriteLock读写锁实例

阅读更多
package concurrent.lock;

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

public class ReadWriteLockTest {
	public static void main(String[] args) {
		final Queue3 q3 = new Queue3();
		for(int i=0;i<3;i++)
		{
			new Thread(){
				public void run(){
					while(true){
						q3.get();						
					}
				}
				
			}.start();

			new Thread(){
				public void run(){
					while(true){
						q3.put(new Random().nextInt(10000));
					}
				}			
				
			}.start();
		}
		
	}
}

class Queue3{
	private Object data = null;//共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。
	ReadWriteLock rwl = new ReentrantReadWriteLock();
	public void get(){
		rwl.readLock().lock();
		try {
			System.out.println(Thread.currentThread().getName() + " be ready to read data!");
			Thread.sleep((long)(Math.random()*1000));
			System.out.println(Thread.currentThread().getName() + "have read data :" + data);			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}finally{
			rwl.readLock().unlock();
		}
	}
	
	public void put(Object data){

		rwl.writeLock().lock();
		try {
			System.out.println(Thread.currentThread().getName() + " be ready to write data!");					
			Thread.sleep((long)(Math.random()*1000));
			this.data = data;		
			System.out.println(Thread.currentThread().getName() + " have write data: " + data);					
		} catch (InterruptedException e) {
			e.printStackTrace();
		}finally{
			rwl.writeLock().unlock();
		}
		
	
	}
}

分享到:
评论

相关推荐

    Java多线程 ReentrantReadWriteLock原理及实例详解

    读写锁通过`ReentrantReadWriteLock`类的实例来创建,该类提供了`readLock()`和`writeLock()`方法,分别用于获取读锁和写锁。 ```java ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Lock readLock...

    各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    本文将深入探讨标题和描述中提及的各种锁,包括乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁以及行级锁。 1. **乐观锁**:乐观锁假设多线程环境中的冲突较少,所以在读取数据时不加锁,只有...

    Java多线程编程之读写锁ReadWriteLock用法实例

    在Java中,`java.util.concurrent.locks`包提供了`ReentrantReadWriteLock`类来实现可重入的读写锁。这个类包含两个核心方法:`readLock()`和`writeLock()`,分别用于获取读锁和写锁。读锁和写锁都是可重入的,这...

    Java 多线程与并发(12-26)-JUC锁- ReentrantReadWriteLock详解.pdf

    在Java多线程并发编程中,ReentrantReadWriteLock(可重入读写锁)是一个重要的同步工具,它属于Java并发包(java.util.concurrent.locks)中的一个类。这个锁提供了比标准的synchronized关键字更细粒度的控制,允许...

    Java并发编程之重入锁与读写锁

    ReentrantReadWriteLock 对象提供了 readLock() 和 writeLock() 方法,用于获取读取锁和写入锁。 读写锁的使用场合是:读取共享数据的频率远大于修改共享数据的频率。在上述场合下,使用读写锁控制共享资源的访问,...

    Java对象锁和类锁全面解析(多线程synchronize

    为了提高效率,Java提供了更高级的锁机制,如读写锁(ReentrantReadWriteLock)、显式锁(java.util.concurrent.locks.Lock接口的实现,如ReentrantLock)、条件变量(Condition)等。这些高级锁允许更细粒度的控制...

    读写线程模仿

    1. **创建读写锁**:首先,我们需要实例化一个`ReentrantReadWriteLock`对象,如`lock = new ReentrantReadWriteLock();`。 2. **读取操作**:当一个线程需要读取共享数据时,它调用`lock.readLock().lock()`来获取...

    java多线程、锁的教程跟案例

    - ReadWriteLock(读写锁):ReentrantReadWriteLock提供了读写分离的锁,允许多个读线程同时访问,但写线程独占资源。 2. **乐观锁** - CAS(Compare and Swap):无锁算法,基于硬件原子操作,检查并更新值,...

    举例说明Java多线程编程中读写锁的使用

    以下示例为 java api并发库中 ReentrantReadWriteLock自带的实例,下面进行解读 class CachedData { Object data; volatile boolean cacheValid; ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();...

    多线程实例

    本实例主要探讨了内部锁(synchronized)、重入锁(ReentrantLock)、读写锁(ReadWriteLock)、Condition以及信号量(Semaphore)等与线程同步相关的概念及其原理。以下是对这些知识点的详细讲解: 1. 内部锁...

    java中的Lock类和Condition类.docx

    - 除了Lock接口,Java还提供了读写锁(ReadWriteLock)接口,其主要实现类是ReentrantReadWriteLock。读写锁允许多个读线程同时访问共享资源,但在写操作时会独占资源,提高了并发性能。 - `ReadLock`和`WriteLock...

    并发编程过程中常用的原子锁和场景解答和模拟

    3. **读写锁(ReentrantReadWriteLock)**:这种锁允许多个读取线程同时访问共享资源,但在写操作时则保持互斥,提高了并发性能。 4. **自旋锁**:当锁被其他线程持有时,自旋锁会让当前线程不断地检查锁的状态,...

    基于JDK源码解析Java领域中的并发锁,我们需要特别关注哪些内容?

    3. **ReentrantReadWriteLock(读写锁)**: - **设计思想**:允许多个读取者同时访问,但只有一个写入者,提高并发性能。 - **实现**:基于AQS封装的Sync抽象类,分为读锁ReadLock和写锁WriteLock,读写锁的状态...

    panda-demo.zip

    - **实现**:Java中`ReentrantReadWriteLock`是ReadWriteLock的实现,它具有可重入性,即一个线程可以获取同一锁多次。 - **组成部分**:读写锁由两把锁组成:读锁(ReadLock)和写锁(WriteLock)。读锁可以被多...

    Java分布式应用学习笔记06浅谈并发加锁机制分析

    读写锁`ReentrantReadWriteLock` `ReentrantReadWriteLock`是一种特殊的锁机制,它支持读锁和写锁两种类型,主要用于解决读多写少的场景下的性能问题。当多个线程同时进行读操作时,不会相互阻塞,可以并行执行。...

    【BAT必备】并发编程锁面试题

    - **ReentrantReadWriteLock类**:提供了一种读写分离的锁机制,允许多个读操作同时进行但不允许读写或写写并发。 #### 二、Java中的锁实现 **2.1 synchronized关键字详解** - **基本语法**:synchronized可以...

    java常用锁使用demo工程

    - **读写锁(ReadWriteLock)**:ReentrantReadWriteLock是Lock的一个实现,分为读锁(ReadLock)和写锁(WriteLock),允许多个读线程同时访问,但写锁是独占的。 - **条件变量(Condition)**:Lock接口提供了一...

    读者写者公平操作

    `ReentrantReadWriteLock`是Java并发包`java.util.concurrent.locks`中的一个锁,它提供了读写锁功能,并且支持公平性和非公平性设置。通过设置构造函数的`fair`参数为`true`,我们可以创建一个公平的读写锁。 首先...

    reader and writer

    1. **初始化锁**:首先,我们需要创建一个`ReentrantReadWriteLock`实例,然后获取其读锁和写锁。 ```java ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); ReadLock readLock = lock.readLock(); ...

Global site tag (gtag.js) - Google Analytics