Java-ReentrantReadWriteLock的简单例子
2015-07-07 20:42
681 查看
内容:读锁时共享的,写锁时互斥的(可见运行结果),都是通过AQS实现的。
运行结果:
public class ReentrantReadWriteLockTest { static class MyObject { private Object object; private ReadWriteLock lock = new ReentrantReadWriteLock(); public void get() { lock.readLock().lock(); System.out.println(Thread.currentThread().getName() + "准备读数据!!"); try { Thread.sleep(new Random().nextInt(1000)); System.out.println(Thread.currentThread().getName() + "读数据为:" + this.object); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.readLock().unlock(); } } public void put(Object object) { lock.writeLock().lock(); System.out.println(Thread.currentThread().getName() + "准备写数据"); try { Thread.sleep(new Random().nextInt(1000)); this.object = object; System.out.println(Thread.currentThread().getName() + "写数据为" + this.object); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.writeLock().unlock(); } } } public static void main(String[] args) throws InterruptedException { final MyObject myObject = new MyObject(); ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0; i < 3; i++) { executor.execute(new Runnable() { @Override public void run() { for (int j = 0; j < 5; j++) myObject.put(new Random().nextInt(1000)); } }); } for (int i = 0; i < 3; i++) { executor.execute(new Runnable() { @Override public void run() { for (int j = 0; j < 5; j++) myObject.get(); } }); } executor.shutdown(); } }
运行结果:
相关文章推荐
- Java编程思想 - 类型信息与反射机制
- Java.lang.Long.parseLong()方法
- 【源代码】java.util.LinkedList
- MYSQY数据库类型与Java类型的对比图(收藏使用)
- 总结eclipse中安装maven插件
- Spring 下载
- eclipse执行debug as出现问题
- Hadoop格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
- javamail
- Java设计模式---单例模式
- Java基础-----Java引用
- SpringMVC动态项目创建是有感叹号!
- 常见JAVA框架
- 字符串半角全角互转详解
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- Spring 事务相关
- Java基础日记———多线程
- 设计模式------Java多线程之静态代理模式
- eclipse导入spring框架