gpt4 book ai didi

java - 多线程: Continuous writing to shared data structure and periodically purging

转载 作者:行者123 更新时间:2023-12-02 10:40:46 25 4
gpt4 key购买 nike

我有一个问题,我有多个线程连续写入,例如并发 HashMap。现在,我想定期处理(通过 TimerJob)该 HashMap 中到目前为止的所有内容。其他线程仍然可以继续写入(这些新数据将在下次 Timejob 启动时处理)。

我想知道实现这一目标的最佳方法是什么。我正在阅读,这个问题看起来很像 Triple Buffer 。但我对此并不十分乐观。

有什么想法吗?

编辑:我想在处理数据后从 map 中删除数据,这样我就不会最终重新处理该数据

编辑:我不需要将数据写入 HashMap/Set。我只需要把它放在一个集合中,我就可以在其他线程仍在写入时定期处理该集合。

最佳答案

我不确定您是否需要 map 中的所有数据,或者 map 中不再需要的计时器作业处理的数据。

如果您只需要像快照这样的计时器作业,您可以像这样用新 map 切换/替换 map 。

private volatile ConcurentHashMap map ;

public void processByTimerJob(){

ConcurentHashMap oldMap = this.map;
this.map = new ConcurrentHashMap; // everyting new will be stored in new map
oldMap.forEach(..... //process old map via iteration or whatever you want

}

关于java - 多线程: Continuous writing to shared data structure and periodically purging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52932256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com