如果生產者線程將對象添加到數的BlockingQueue之一:S,並按照該遞增的原子整數。消費者線程在查詢每個BlockingQueue並查找排隊的對象之前是否會看到遞增的整數值?可視性和原子計數器更新的順序VS阻塞隊列
該文件說明有一個發生在與閱讀計數器的關係。所以我的理解是消費者線程應該始終在阻塞隊列中看到添加的項目。
我有一個困難的錯誤,它看起來好像消費者線程首先看到遞增的整數,但他們永遠不會在它們輪詢的阻塞隊列中找到任何對象(因爲輪詢對所有隊列都返回null)。所有生產者線程都遵循「添加到隊列然後增加計數器」的行爲。
另外,還有一些無證原因,你可以從輪詢的BlockingQueue,比隊列爲空的其他空回。
(如果它的事項,我用java.util.concurrent.LinkedBlockingQueue中看到這一點。)
是對項目從隊列中取出後,計數器遞減?何時和由哪個線程?似乎在櫃檯狀態和隊列狀態之間可能會有比賽。發佈代碼將有所幫助。 –