BlockingQueue商品提供方法有时候不会将商品添加到列表中

时间:2018-05-21 16:26:16

标签: java concurrency blockingqueue

我在多线程系统中使用BlockingQueue,其中synchronized块将项添加到列表中。有时它不会将项目添加到列表中,它未命中的项目是随机的。我尝试在代码中添加以下行,然后它从未错过任何项目。

list.forEach(item -> logger.info(" In list "+item));

我觉得这种行为有点奇怪。有人可以帮我弄清楚如何解决这个丢失文件的问题?我不想不必要地遍历整个列表。我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

offer的文档说它有时会失败。

  

将指定元素插入此队列如果可以立即而不违反容量限制,则在成功时返回true,如果当前没有可用空间则返回false。

如果您在尝试添加时可以阻止,请使用put

  

将指定的元素插入此队列,在必要时等待以使空间可用。