阻塞队列的流控制和SocketChannel写

时间:2015-11-23 07:26:11

标签: java blockingqueue socketchannel

我有一个阻塞队列,其中有多个编写器正在编写。我想把一个事务控制机制放在不超过50个写入器(或接近)每秒写入的位置。有没有办法实现呢?

编辑1:使用SocketChannel写入方法有类似的要求。那就是允许n个写入者每秒写入。 n的值不同。我不用担心。

另一个编辑:我正在考虑使用我将发布的Cyclic Barrier&每秒重置一次。我正朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:0)

我不认为50位作家的信号量就足够了。

你可以做的,例如有一张票证池和一个发行它们的机制。池的大小允许您规定最大编写者数量,并且发布它们的机制将允许您控制流程。

基本上,流程将是这样的:

  1. 作家要求出票。在为wrjter提供票证时,您可以使用信号量对其他线程进行vlock访问。
  2. 一旦作家有票,就会写入缓冲区。
  3. 作者返回票证(同样,您可以使用信号量来控制对此部分的访问,以便在任何一个时刻作者要么请求或返回票证。)

答案 1 :(得分:0)

最后我混合了两个解决方案以达到我想要的效果。我使用有界信号量来限制任何时间点的编写器以及定时循环屏障,这有助于我定义总写入/秒。