标签: java concurrency blockingqueue
我在多线程系统中使用BlockingQueue,其中synchronized块将项添加到列表中。有时它不会将项目添加到列表中,它未命中的项目是随机的。我尝试在代码中添加以下行,然后它从未错过任何项目。
list.forEach(item -> logger.info(" In list "+item));
我觉得这种行为有点奇怪。有人可以帮我弄清楚如何解决这个丢失文件的问题?我不想不必要地遍历整个列表。我错过了什么吗?
答案 0 :(得分:6)
offer的文档说它有时会失败。
将指定元素插入此队列如果可以立即而不违反容量限制,则在成功时返回true,如果当前没有可用空间则返回false。
如果您在尝试添加时可以阻止,请使用put
将指定的元素插入此队列,在必要时等待以使空间可用。