【发布时间】:2023-03-14 14:19:01
【问题描述】:
我使用的是 LinkedHashMap 并且环境是多线程的,所以这个结构需要是线程安全的。在特定事件期间,我需要阅读整个地图推送到数据库并清除所有内容。
大多数情况下,此映射只会发生写入。此地图的条目限制为 50 个。
我正在使用 Oracle MAF,但它没有可用的 Collections.syncronizedMap。那么,我需要在同步块中放入哪些内容以确保写入和读取不会打到我 concurrentModificationException 等
几个要求:
- 我需要让它像一个循环队列一样,所以重写 LinkedHashMap 的 removeEldestEntry 方法。
- 我需要保留订单
【问题讨论】:
-
每次调用 hasmap 上的方法时,例如
get或put,都需要用同步包围它。如果您连续有多个呼叫,您可以用一个同步将它们全部包围。发布您的一些代码。 -
在写入数据库时不要同步地图。制作一个副本(在 synchronized{} 中),将副本写入 db。
-
您看到了什么好处?我的地图最多可以容纳 50 个条目。而且我相信制作副本与迭代它所花费的时间相同。
标签: java multithreading data-structures concurrency oracle-maf