线程读写锁

原创 2012年03月25日 14:23:00
//读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。
//如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;
//如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁
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();
		}
	}
}

相关文章推荐

rn_xtcxyczjh-8 并发[线程4 读写锁接口]

2015.10.31 读xtcxyczjh(系统程序员成长计划)---- 学习程序设计方法。 之前代码中的内存泄露BUG见3.1。此次抄于读者的读写锁代码保存地址:y15m10d31(rw_lock...

Linux 下的线程读写锁

有一种写优先读写锁,有如下特点: 1)多个读者可以同时进行读 2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者...
  • yuyin86
  • yuyin86
  • 2011年10月20日 22:58
  • 607

线程类Thread的API接口分析系列之读写锁ReentrantReadeWriteLock

读写锁的使用相对简单,原则也好记,那就是读读之间不互斥,读写之间互斥,直接上例子吧 读读之间: public class ReadeWriteLockTest implementsRunnable...

java线程系列---读写锁ReentrantReadWriteLock

获取顺序 此类不会将读取者优先或写入者优先强加给锁定访问的排序。但是,它确实支持可选的公平 策略。当公平地构造线程时,线程利用一个近似到达顺序的策略来争夺进入。当释放写入锁定后,将写入锁定分配给等待...

(转)Linux平台用C++封装线程读写锁

转载自:http://blog.csdn.net/chexlong/article/details/7163233       在Linux平台上已经有现成的线程读写锁pthread_rwlock...
  • yuxq100
  • yuxq100
  • 2011年12月31日 09:07
  • 294

Java线程(四):JUC包线程互斥与同步以及读写锁

前言: 1、Java线程(一):传统线程的实现、互斥与通信 一、线程的互斥 (一)传统互斥:synchronized 关键字  1、synchronized(对象) 代码块需要锁定同一...

实现线程读写锁的四种方法

对于某个临界互斥资源, 读写锁:当已经被加了读锁时,其他的读模式锁请求仍然可以访问,但是写模式锁不能访问;当写模式锁加锁时,其他的请求都不能访问。...

Linux平台用C++封装线程读写锁

在Linux平台上已经有现成的线程读写锁pthread_rwlock_t以及相关API,现将这些API封装成与Win32平台上相同的接口,以便于编写跨平台程序。这些API包括pthread_rwloc...

线程读写锁总结

线程读写锁总结概括:pthread_wrlock 线程读写锁用于多线程的异步控制,主要是用于并发控制; 主要接口函数 接口名 入参 出参 备注 int pthread_rwlock...

2.4.线程的同步和协作_读写锁

读写锁 锁机制引入了读写锁特性:ReadWriteLock接口和唯一的实现类ReentrantReadWriteLock。读写锁是锁机制的最大改进之一,提供了将读和写分开处理的能力。Re...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程读写锁
举报原因:
原因补充:

(最多只允许输入30个字)