关于ReentrantReadWriteLock小实例
来源:互联网 发布:linux翻译软件 编辑:程序博客网 时间:2024/06/11 16:23
package cn.test.thread;import java.util.Map;import java.util.HashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * Created by lim on 2017/2/16. */public class TestThread { public static void main(String[] args)throws Exception{ final Person person = new Person(); final Thread t1 = new Thread(new Runnable() { @Override public void run() { try { int i = 0; //while (true) { // i++; person.write("A","A"); //Thread.sleep(1000); // } } catch (InterruptedException e) { System.out.println("此线程已被挂起..."); //e.printStackTrace(); } } });// Thread t11 = new Thread(new Runnable() {// @Override// public void run() {// System.out.println("取到了:"+person.read("A2").toString());// }// }); Thread t2 = new Thread(new Runnable() { @Override public void run() { System.out.println("取到了:"+person.read("A1").toString()); } }); //t11.start(); t1.start(); t2.start(); Thread.sleep(2000); // interrupt 只能打断阻塞的线程 // 如果想打断正在运行的线程,我的方法:需要打断的业务中添加 Thread.sleep(100) t1.interrupt(); }}class Person{ Map<String, Object> rmap = new HashMap<String, Object>(); ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Lock r = lock.readLock(); Lock w = lock.writeLock(); public void write(String key, String msg) throws InterruptedException{ try { // 加写入锁 // ( 如果你乐意<脑残>也可以加读锁,这样向map放值的动作变为可多个线程同时执行的了) w.lock(); int i = 0; while(true){ i++; System.out.println("开始放入第...."+" :"+msg+i); rmap.put(key+i,msg+i);// try {// Thread.sleep(1000);// } catch (InterruptedException e) {// //e.printStackTrace();// } if(i >= 20){ break; } } } finally { w.unlock(); } } public Object read(String key) { Object obj = null; try { // 加读锁 r.lock(); obj = rmap.get(key); } catch (Exception e){ e.printStackTrace(); } finally { r.unlock(); } return obj; }}
1 0
- 关于ReentrantReadWriteLock小实例
- ReentrantReadWriteLock理解与实例
- 关于websocket小实例
- 关于委托小实例
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock
- 关于synchronized以及ReetrantLock、ReentrantReadWriteLock的选择
- 关于继承的应用小实例
- swift 常量使用注意事项
- Cordova Ajax请求跨域问题整理
- kmp算法对应next数组中核心while部分的剖析
- php实现文件上传到指定文件夹,文件路径或名字存入数据库,如何实现啊
- 两种自定义安全键盘&屏蔽系统输入法
- 关于ReentrantReadWriteLock小实例
- 安装Ubuntu系统
- 谷歌学术辅助科研
- Unity学习日记(十三) xml文件简单的操作(一)
- 一个封装好的SurfaceView+MediaPlayer开源视频播放器
- 二分查找算法 python
- java调用matlab程序
- RCNN论文学习
- 1002 写出这个数 (20)