多线程编程9----使用读写锁模拟hibernate缓存Demo
来源:互联网 发布:idc唯一网络排名 编辑:程序博客网 时间:2024/05/22 17:02
package zhu.suo;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheDemo {
private Map<String,Object> cache = new HashMap<>();
public static void main(String[] args) {
}
//枷锁避免多线程抢占
public synchronized Object getData(String key){
//自己的缓存池是否有数据,没有则查数据库
Object v = cache.get(key);
if (v == null)
{
v = "aa";//queryDB
}
return null;
}
/*
* 读写锁
* 多线呈读锁可以并发
* 多线程读写锁互斥
* 多线程写锁互斥
* */
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData2(String key){
//自己的缓存池是否有数据,没有则查数据库
rwl.readLock().lock();//读锁 先锁
Object v = null;
try{
v = cache.get(key);
if (v == null)
{
//若缓存池没有这数据,则先解读锁,再加写锁 写入数据
rwl.readLock().unlock();
rwl.writeLock().lock();//当有三个线程到这里,只能有一个线程开启写,其余线程等待
try{
if (v==null)// 其余等待二线成,发现数据已填充则绕道而行
v = "aa";//queryDB
}finally{
rwl.writeLock().unlock();
rwl.readLock().lock();
}
}
}finally{
rwl.readLock().unlock();
}
return v;
}
}
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheDemo {
private Map<String,Object> cache = new HashMap<>();
public static void main(String[] args) {
}
//枷锁避免多线程抢占
public synchronized Object getData(String key){
//自己的缓存池是否有数据,没有则查数据库
Object v = cache.get(key);
if (v == null)
{
v = "aa";//queryDB
}
return null;
}
/*
* 读写锁
* 多线呈读锁可以并发
* 多线程读写锁互斥
* 多线程写锁互斥
* */
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData2(String key){
//自己的缓存池是否有数据,没有则查数据库
rwl.readLock().lock();//读锁 先锁
Object v = null;
try{
v = cache.get(key);
if (v == null)
{
//若缓存池没有这数据,则先解读锁,再加写锁 写入数据
rwl.readLock().unlock();
rwl.writeLock().lock();//当有三个线程到这里,只能有一个线程开启写,其余线程等待
try{
if (v==null)// 其余等待二线成,发现数据已填充则绕道而行
v = "aa";//queryDB
}finally{
rwl.writeLock().unlock();
rwl.readLock().lock();
}
}
}finally{
rwl.readLock().unlock();
}
return v;
}
}
0 0
- 多线程编程9----使用读写锁模拟hibernate缓存Demo
- 多线程Demo-ReentrantReadWriteLock读写锁
- 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
- 基于读写锁的缓存demo
- 读写锁实现缓存系统demo
- DEMO:集合模拟缓存
- 读写锁实现模拟缓存池
- 利用读写锁模拟一个缓存系统
- JAVA 并发编程-读写锁之模拟缓存系统(十一)
- JAVA 并发编程-读写锁之模拟缓存系统(十一)
- Java多线程编程4--ReentrantReadWriteLock的使用(读写锁)
- 多线程编程入门(13):读写锁的使用(ReentrantReadWriteLock)
- 多线程 : 读写锁实现缓存系统
- 多线程编程 RW_LOCK 读写锁
- 多线程编程 RW_LOCK 读写锁
- java多线程编程之读写锁设计高性能缓存器
- 使用libevent进行多线程socket编程demo
- 模拟Hibernate一级缓存
- 【Android笔记】 通用ListView适配器
- java基础总结
- linux input命令学习
- LeetCode: Clone Graph
- 理解 Java 的 GC 与 幽灵引用
- 多线程编程9----使用读写锁模拟hibernate缓存Demo
- 关于JAVA中状态设计模式的讲解示例代码
- JBPM学习(三):管理流程定义
- 【大数问题】 HDOJ 1250 Hat's Fibonacci
- Hello World @Sep 1
- win7 java jdk的安装配置
- 关于不用if,switch,?:语句判断两个数大小及其他
- 多线程编程10----condition同步工具类的使用
- MySQL中同时存在创建和上次更新时间戳字段解决方法浅析