【问题标题】:Java synchronize items in two collections asynchronously using separate taskJava使用单独的任务异步同步两个集合中的项目
【发布时间】:2020-02-06 15:36:37
【问题描述】:

我需要一些高效的代码来同步两个集合中的项目。我的意思是当一个项目添加到第一个集合时,它也应该添加到第二个集合中,但是将项目添加到第二个集合应该异步完成(例如,通过使用 Spring Boot 调度任务 API 循环调用的单独任务),以便两个集合包含相同的项目。

假设只有添加新项目的可能性

这些同步应该是有效的,这样这个算法才能在生产环境中工作。 两个列表的同步最多需要几秒钟

你能帮忙吗?

提前致谢

【问题讨论】:

  • 使用易失的布尔字段来发出信号并使用同步队列来消费元素(通过第二个线程)?第二个线程将循环轮询。
  • 它们是列表吗?移除元素呢?
  • 所以第二个线程应该被封闭在无限循环中并从第一个集合中获取新项目?在这种情况下,哪种 Collection 实现最有效?根本没有删除功能:)
  • @Thomas,如果没有删除,那么(假设两个集合都是列表),您可以在第二个线程中循环,检查集合大小差异,然后将 subList 添加到异步集合中。我无法谈论效率:没有足够的数据说明数据更改的频率以及必须对集合元素进行何种访问。

标签: java spring-boot collections synchronization


【解决方案1】:

我建议您在读取第二个集合时查看同步方向(理想情况下是在第一个集合中录制,但显然这是不可能的)。

Object get(Object key) {
    if (compareCollectionsBySize()) //it should be a simple, inexpensive operation
    {
        return duplicateCollection.get(key);
    } else {
        //we need synchronization
        //it all depends on the duration of the synchronization
        //and search costs for the original collection

        //in case fast synchronization
        synchronizeCollections();
        return duplicateCollection.get(key);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多