读写锁缓存数据

谁践踏了优雅 2022-11-21 06:52 307阅读 0赞
  1. public class LockTest {
  2. private static Map<String, Object> cacheMap = new HashMap<>();
  3. private static ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
  4. public static void main(String[] args) {
  5. Object value = getKey("aaa");
  6. Object value2 = getKey("aaa");
  7. System.out.println(value);
  8. System.out.println(value2);
  9. }
  10. public static Object getKey(String key) {
  11. readWriteLock.readLock().lock();
  12. try {
  13. Object result = cacheMap.get(key);
  14. if (result != null) {
  15. return result;
  16. }
  17. readWriteLock.readLock().unlock();
  18. readWriteLock.writeLock().lock();
  19. try {
  20. result = cacheMap.get(key);
  21. if (result != null) {
  22. return result;
  23. }
  24. // 模拟从db查询
  25. result = new Date();
  26. System.out.println("入库");
  27. cacheMap.put(key, result);
  28. return result;
  29. } finally {
  30. readWriteLock.writeLock().unlock();
  31. readWriteLock.readLock().lock();
  32. }
  33. } finally {
  34. readWriteLock.readLock().unlock();
  35. }
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    共享锁(S锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但

    相关 互斥

    一、线程互斥方式。 --- 互斥锁 1、什么是互斥锁?特点怎么样? 互斥锁是专门用于处理线程之间互斥的一种方式,它有两种:上锁状态/解锁状态。 如果互斥锁处于上锁状

    相关

    读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。 具有强读者同步和强写者同步两种形式 强