【问题标题】:thread safe random access circular array in java?java中的线程安全随机访问循环数组?
【发布时间】:2020-06-20 17:02:36
【问题描述】:

我需要缓存并发系统的最近的结果(比如 10,000),并随机访问它们。 由于大多数并发缓存都是基于链表的,所以我想知道java中是否存在线程安全的随机访问循环数组?

【问题讨论】:

  • 您能否详细说明您需要如何使用它?例如,Guava 的内存缓存是否适合您?
  • 假设“随机访问”是指按索引访问?如果是这样,是按LRU顺序吗?如果是这样,你为什么需要它?你到底想达到什么目的?
  • @Daniele 用于故障转移的本地缓存,写操作远多于读操作
  • @Bohemian 是的,按索引,但限制比 LRU 弱,因为它只用于故障转移
  • 链表的锁定问题在设计良好的缓存中应该不是问题。如果您需要 LRU,那么 ConcurrentLinkedHashMapGuava's Cache 就足够了。如果您可以利用更智能的驱逐策略,那么Caffeine 是首选。见benchmarks

标签: java caching concurrency circular-buffer


【解决方案1】:

【讨论】:

  • 根据文档,当遍历操作大大超过突变时,copyOnWriteArrayList 效率更高。但是我们写的比读的多
  • 那么你可以使用传统数组并同步访问它:List<String> list = Collections.synchronizedList(new ArrayList<String>());
猜你喜欢
  • 1970-01-01
  • 2019-08-09
  • 2015-05-23
  • 1970-01-01
  • 2020-01-31
  • 2011-08-14
  • 2020-01-28
  • 1970-01-01
相关资源
最近更新 更多