阻止队列消费者和竞争条件

时间:2013-03-07 06:09:01

标签: java

我有一个应用程序,它将不断从外部系统收到股票价格。

价格将由stockID键入。

随着价格的上涨,它们将被送到阻塞队列。

将有一个线程池,它将从此队列中使用和处理,并将价格放入缓存(库存ID和价格的哈希映射)。

让我困扰的是,如果队列中存在重复股票ID的价格,当线程处理这些股票时,可能会在较新的价格之后将较旧的价格写入缓存。

无论如何都可以绕过这种情况吗?

如何确保最后处理最新消息?

1 个答案:

答案 0 :(得分:1)

您可以使用自动递增的序列号标记每个传入的价格更新。写入缓存时,您可以删除序列号低于该库存缓存中已有序列号的每个更新。

或者,您可以跨线程对库存Universe进行分区,这意味着给定库存的更新始终由同一个线程处理。