在Java应用程序中读取Socket连接中的项目我需要(由于此处未进一步概述的原因)
所以实际上我想使用一个工作线程处理从套接字接收的缓冲项。一个拟合队列作为工作线程和读者线程之间的缓冲区,这将是一种具有FIFO容量的公平SynchronousQueue
。
所需的队列应该像ArrayBlockingQueue
或LinkedBlockingQueue
一样具有容量而不是已满并且与SynchronousQueue
类似,当满意时
put
仅在队列已满时阻止线程take
仅在队列为空时阻止线程take
将为调用者提供下一个FIFO元素,并在put
操作中等待并插入等待下一个线程的元素put
会将元素移交给poll
操作中的线程等待或插入有没有这样的已知实现,还是我必须推出自己的实现?
答案 0 :(得分:1)
一个答案不仅仅是试图从建议使用ArrayBlockingQueue的海报中窃取积分:
两个ArrayBlockingQueues。一个充当游泳池队列' - 启动时填充缓冲区对象。另一个是处理线程等待工作。
套接字线程在加载数据并将其排队到处理线程之前必须从池中获取缓冲区。处理完数据后,处理线程最终必须返回使用过的'对象回到游泳池。如果池清空,则套接字线程会阻塞它,直到返回一些缓冲区为止。
这提供了与有界处理队列相同的流控制,但具有额外的优点,即避免了缓冲区上的GC。