Java-ReentrantReadWriteLock的简单样例
2024-09-02 05:32:04
内容:读锁时共享的。写锁时相互排斥的(可见执行结果)。都是通过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();
} }
执行结果:
最新文章
- 剑指offer 复制构造函数
- d3 scale 学习笔记
- sql之多表连接
- [转]Java连接各种数据库的方法
- 蜥蜴(bzoj 1066)
- UWP开发入门(十五)——在FlipView中通过手势操作图片
- 增量升级(省流量更新)的Android客户端实现
- You must supply a layout_width attribute的错误原因及解决办法
- 划分树 静态第k大
- json字符串中key值下划线命名转换为驼峰命名
- USACO2004 Open提交作业(区间DP)
- rabbitmq 3.7.8基于centos7部署文档
- Unity3d自制字体
- 自适应电脑、手机和iPad的网页设计方法
- 在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
- joomla 的语言翻译
- UI5-学习篇-15-云连接SAP Cloud Connector
- IQueryable与IEnumerable
- es6学习笔记10--箭头函数
- 吴恩达-coursera-机器学习-week10