BlockingQueue offer方法有时不会将项目添加到列表中

Chi*_*rag 1 java concurrency blockingqueue

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

list.forEach(item -> logger.info(" In list "+item));
Run Code Online (Sandbox Code Playgroud)

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

cor*_*iKa 6

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

如果可以在不违反容量限制的情况下立即执行此操作,则将指定的元素插入此队列,成功时返回true,如果当前没有可用空间则返回false.

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

将指定的元素插入此队列,等待空间变为可用.