在从 Socket 连接读取项目的 Java 应用程序中,我需要(出于此处未进一步概述的原因)
- 要由单个线程处理的输入项,以便保留它们的顺序。
- 在处理之前要缓冲的输入项,以便可以从套接字读取新项,而其他项仍在处理中。
- 只要缓冲区已满,读取线程就会被阻塞
所以实际上我想使用一个工作线程来处理从套接字接收到的缓冲项目。以及一个合适的队列作为工作线程和读取线程之间的缓冲区,这将是一种SynchronousQueue
具有 FIFO 容量的公平。
所需的队列应该表现得像一个ArrayBlockingQueue
or LinkedBlockingQueue
with capacity while not full 并且类似于一个SynchronousQueue
when full 意思是
put
on queue 只会在队列已满时阻塞线程take
on queue 只会在队列为空时阻塞线程take
在一个完整的队列上将给调用者下一个 FIFO 元素并解除阻塞并插入来自下一个线程等待put
操作的元素put
在空队列上,要么将元素交给线程等待poll
操作,要么将其插入
有没有这样的已知实现,还是我必须推出自己的?