java.util.concurrent.LinkedBlockingQueue is not FIFO?



java.util.courrent.LinkedBlockingQueue的简要描述说它是一个FIFO队列,这意味着如果线程a先向队列中添加一堆条目(a1,a2,…an),然后线程B向队列中再添加一些东西(b1,b2,…bm),那么一些使用者线程应该在从B中获取这些条目之前耗尽a中的所有条目(即FIFO)。但我看到的是,来自A的条目和来自B的条目是交错的,尽管B添加条目的时间比A晚得多。我当时正在查看Tomcat+Jersey应用程序的代码,它使用一个单独的LinkedBlockingQueue加上几个异步工作线程来处理来自客户端的请求条目。

我一直在质疑代码的公平性,因为延迟到达的请求必须在队列中等待,直到之前的条目都用完(客户每次请求可以提交数千个条目),但令我惊讶的是,延迟到达的客户几乎立即得到了回复。那么这是否意味着LinkedBlockingQueue不是FIFO??请帮帮我,因为我很困惑。

队列是FIFO,线程从队列中删除对象的顺序是FIFO。一旦线程掌握了对象并开始运行方法,FIFO顺序就会丢失。

你怎么能分辨出"来自A的条目和来自B的条目是交错的"?

最新更新