多线程学习记录3-读写锁
来源:互联网 发布:c语言调试器 编辑:程序博客网 时间:2024/06/10 02:36
1:读写锁简单demo,读-写线程互斥,写-写线程互斥:
public class Test6 {public static void main(String[] args) {final Console cnl = new Console();for (int i=0; i<3; i++){new Thread(new Runnable() {@Overridepublic void run() {while (true){cnl.getData();}}}).start();new Thread(new Runnable() {@Overridepublic void run() {while (true){cnl.putData(10001);}}}).start();}}}class Console{private Object data = null;private ReadWriteLock rwl = new ReentrantReadWriteLock();public void getData(){rwl.readLock().lock();try {System.out.println(Thread.currentThread().getName() + ":开始读数据:");Thread.sleep((long)Math.random()*1000);System.out.println(Thread.currentThread().getName() + "读到数据:" + data);}catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{rwl.readLock().unlock();}}public void putData(Object data){rwl.writeLock().lock();try {System.out.println(Thread.currentThread().getName() + ":开始写入数据");Thread.sleep((long)Math.random()*1000);this.data = data;System.out.println(Thread.currentThread().getName() + ":写完数据:" + data);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{rwl.writeLock().unlock();}}}
2:简单的cache系统:
public class CacheDemo {private Map cache = new HashMap<String, Object>();public static void main(String[] args) {}/**读写锁*/private ReadWriteLock rwl = new ReentrantReadWriteLock();public Object getData(String key){rwl.readLock().lock();Object value = null;try{//查询缓存中的数据value = cache.get(key);if (value == null) {// 缓存系统中没有数据,需要去数据库中查询数据//解开读锁,加上写锁rwl.readLock().unlock();rwl.writeLock().lock();try{if (value == null){//防止后来的线程再次操作数据库去取数据value = "ppp";}}finally{//填充完毕数据,恢复读锁。同一个线程加上了写锁,可以再加上读锁。一个线程中不会起冲突。rwl.readLock().lock();//解开写锁rwl.writeLock().unlock();}}}finally{rwl.readLock().unlock();}return value;}}
- 多线程学习记录3-读写锁
- 多线程学习记录3
- 多线程学习--多线程中读写锁
- 多线程学习记录4-Lock锁
- iphone多线程-学习记录
- java多线程学习记录
- java多线程学习记录
- python 多线程学习记录
- Java多线程学习记录
- 多线程学习记录1
- 多线程学习记录2
- c#多线程读写锁
- 多线程---读写锁
- 多线程文件读写锁
- 多线程的读写锁
- 多线程之读写锁
- 多线程中的读写锁
- Java多线程--读写锁
- 添加路径到sys.path
- Flash web game移植到android平台需要注意的地方
- UDP Socket
- SQL Server CONVERT() 函数
- sp_send_dbmail (Transact-SQL)
- 多线程学习记录3-读写锁
- hadoop源码 找不到org.apache.test.ant
- 可行性研究
- Red Hat Enterprise Linux (RHEL) 6.3 update firefox
- c# winform背景图片超过屏幕分辨率怎么办
- 分类信息网 1.0 版正式提供下载
- 如何编写高效swing程序
- java得到系统时间
- UDP Socket(long)