线程读写锁
2012-03-25 14:23
134 查看
//读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由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(); } } }
相关文章推荐
- Go语言 线程简单读写
- 线程------竞争,互斥量---多线程对同一文件读写问题
- 2.4.线程的同步和协作_读写锁
- 实现线程读写锁的四种方法
- QT操作Excel时将读写功能置于子线程内存报错解决方案
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- Delphi多线程编程之五不同类线程读写全局变量-阻塞和锁定
- (转)Linux平台用C++封装线程读写锁
- 读写锁的操作1(设计六个线程,三个线程写入数据,三个线程读取数据,请用读写锁进行操作)
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- 浅析线程间通信二:读写锁和自旋锁
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁
- 线程高级---读写锁
- 基于ACE框架---C++多线程开发总结1,涉及 互斥量、读写锁、条件锁、基于条件锁的线程流水控制
- Linux 下的线程读写锁
- 线程模型--读写模型
- Java总结(十)—实现Runnable接口创建线程,线程安全同步,死锁(哲学家进餐问题),读写锁
- Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁
- 2.使用synchronized关键字实现多线程的同步和互斥(不同线程同时读写同一数据)