zoukankan      html  css  js  c++  java
  • java缓存及读写锁实例应用

    package com.thread.demo.lock;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    /**
    * 
    * @author Torey
    *
    */
    public class CacheDemo {
    // 创建一个缓存对象
    static Map<String, Object> cache = Collections
    .synchronizedMap(new HashMap<>());
    static ReadWriteLock rwLock = new ReentrantReadWriteLock();
    
    /**
    * 定义一个获取数据的方法
    * 
    * @param key
    * @return
    */
    public Object getData(String key) {
    // 开启读锁
    rwLock.readLock().lock();
    Object value = null;
    try {
    // 获取到缓冲对象中的数据
    value = cache.get(key);
    if (value == null) {
    // 关闭读锁
    rwLock.readLock().unlock();
    // 开启 写锁
    rwLock.writeLock().lock();
    try {
    value = cache.get(key);
    if (value == null) {
    System.out.println("从DB获取数据:" + key);
    cache.put(key, key + "_key的值");
    value = cache.get(key);
    } else {
    System.out.println("从缓存读取:");
    value = cache.get(key);
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    // 释放写锁
    rwLock.writeLock().unlock();
    }
    // 释放读锁
    rwLock.readLock().lock();
    } else {
    System.out.println("从缓存读取");
    value = cache.get(key);
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    // 关闭读锁
    rwLock.readLock().unlock();
    }
    return value;
    }
    
    static class CacheRunnable implements Runnable {
    
    @Override
    public void run() {
    // TODO Auto-generated method stub
    for (int i = 0; i < 3; i++) {
    System.out.println(Thread.currentThread().getName() + "_" + i+"="+new CacheDemo().getData(Thread.currentThread().getName() + "_" + i));
    }
    }
    
    }
    
    public static void main(String[] args) {
    
    for (int i = 0; i < 3; i++) {
    new Thread(new CacheRunnable(), "线程").start();
    }
    }
    }
    
     
    明天你会感激你今天所做的努力。
  • 相关阅读:
    洛谷 P1508 Likecloud-吃、吃、吃
    Codevs 1158 尼克的任务
    2017.10.6 国庆清北 D6T2 同余方程组
    2017.10.6 国庆清北 D6T1 排序
    2017.10.3 国庆清北 D3T3 解迷游戏
    2017.10.3 国庆清北 D3T2 公交车
    2017.10.3 国庆清北 D3T1 括号序列
    2017.10.4 国庆清北 D4T1 财富
    2017.10.7 国庆清北 D7T2 第k大区间
    2017.10.7 国庆清北 D7T1 计数
  • 原文地址:https://www.cnblogs.com/Torey/p/9029464.html
Copyright © 2011-2022 走看看