素材牛VIP会员
java如何实现线程安全的缓存
 懒***材  分类:Java代码  人气:606  回帖:2  发布于6年前 收藏

众所周知,java中实现缓存最简单的办法就是使用LinkedHashMap。参考: http://aliahhqcheng.iteye.com/admin/blogs/1665024

然而这样的缓存,在多线程下就会出现问题,使得程序发生异常。那么问题来了,如何实现一个线程安全的缓存呢?

  1. 有线程安全的HashMap-->ConcurrentHashMap,可是没有线程安全的LinkedHashMap。不过阿里的同学实现了一个对ConcurrentHashMap进行改装,实现了线程安全的缓存,参考:http://jm-blog.aliapp.com/?p=689
  2. 使用Collections.synchronizedMap()包装LinkedHashMap,这个也是一种实现方式。
  3. 使用读写锁ReentrantReadWriteLock+LinkedHashMap实现。
  4. 使用synchronized + memcached
  5. redis可以支持吗?
  6. guava cache如何实现的

想听一听大家的建议?

 标签:java

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv5 码农
zh***ao 职业无 6年前#1

redis的一些原子操作可以支持多线程

Lv3 码奴
ch***az 职业无 6年前#2

读写锁ReentrantReadWriteLock+LinkedHashMap 会有线程安全问题,最好是用ConcurrentHashMap+RWLock

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取