Java集合上的原子拷贝和清除

sze*_*fuf 2 java collections concurrency multithreading

我知道经常会问类似的问题,但我找不到任何可以帮助我的东西.

情况是这样的:

  • 一名工人正在为收集添加元素
  • 第二个是等待一段时间(元素的成熟)或一定的收集规模,并开始它的工作.

问题是:如何复制(我认为最好是复制工作)第二个工人的集合,然后清除原始集合,以确保我们不会丢失任何东西(第一个工人一直在写)但不要保持锁定原始集合尽可能短?

谢谢

Ian*_*rts 9

如果你使用专门构建的并发工具LinkedBlockingQueue而不是普通的工具,这种事情会容易得多HashSet.让生产者向队列中添加元素,并且消费者可以drainTo根据需要批量提取队列中的元素.不需要任何同步,因为BlockingQueue实现被设计为线程安全.