JAVA多线程使用JDK1.5提供的读写锁实现高并发本地缓存工具类
2019-09-14 07:06
2799 查看
package com.study; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class ReadWriteLockDemo { private static Map<String, Object> cacheMap = new LinkedHashMap<String, Object>(); public static void main(String[] args) { ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo(); final CacheUtils cacheUtils = readWriteLockDemo.new CacheUtils(); Thread thread = new Thread(new Runnable() { @Override public void run() { for(Integer index = 0;index <= 100;index ++){ System.out.println(cacheUtils.putCache(index.toString())); } } }); thread.start(); Thread thread2 = new Thread(new Runnable() { @Override public void run() { for(Integer index = 0;index <= 100;index ++){ System.out.println(cacheUtils.putCache(index.toString())); } } }); thread2.start(); } class CacheUtils { // 定义一把读写锁 ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public Object putCache(String key){ //进来时,先用读锁进行上锁 readWriteLock.readLock().lock(); Object value = null; try { value = cacheMap.get(key); if(value == null){ readWriteLock.readLock().unlock(); try { readWriteLock.writeLock().lock(); if(value == null){ //此处实际上是查询DB value = "huangkejie" + key; cacheMap.put(key, value); } } catch (Exception e) { e.printStackTrace(); }finally{ readWriteLock.writeLock().unlock(); } readWriteLock.readLock().lock(); } } catch (Exception error) { error.printStackTrace(); } finally{ readWriteLock.readLock().unlock(); } return value; } } }
相关文章推荐
- 【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列
- 一个非常简单的缓冲—使用Java5提供的读写锁处理多线程操作
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Java之——redis并发读写锁,使用Redisson实现分布式锁
- 【Java并发编程实战】– 使用读写锁实现同步数据访问 lock_2
- 如何使用Java实现简单的本地缓存?
- 使用java并发工具栅栏(CyclicBarrier)实现多线程等待,同一时刻执行共同任务
- java并发-使用内置条件队列实现简单的有界缓存
- Java之——redis并发读写锁,使用Redisson实现分布式锁
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- jdk1.4 构建 java多线程,并发设计框架 使用列子(二)
- 对比.net使用Java的匿名类对工厂方法模式提供更优雅的实现
- Java多线程之~~~~使用wait和notify实现生产者消费者模型
- 实现 Java 多线程并发控制框架
- java spring 使用注解来实现缓存
- java使用递归算法实现加载本地磁盘的文件目录和文件
- java对象本地缓存机制的实现
- 对比.net使用Java的匿名类对工厂方法模式提供更优雅的实现