Java中的优先级队列,因此每个生产者一次获得一个转弯

时间:2015-06-12 03:50:44

标签: java queue

如果我有多个用户(不可数),每个人都在放工作项 在队列中,我如何实现一个队列,以便每个用户得到一个回合 一段时间?

例如,如果我有用户A B C,并且有一个类似[A A B C D A A B的队列 C A],我希望按此顺序处理[A B C D A B C A]

这很容易实现,但如果有更多工作的话会怎样 处理当前队列元素。所以:

  • 从队列开始:[A A B C D A A B C A]
  • 处理队列:A B C D
  • 队列现在是:[A A A B C A]
  • 增加了更多工作:[A A A B C A D E A B C]
  • 处理队列A B C D E

我不知道有多少不同的可能用户会提前知道 是的,所以不能简单地遍历预定义的用户列表并且工作 (如果有的话)。我不关心每个用户的订单 工作得到处理,只要没有用户获得两个单位工作而其他工作 用户有工作等待。

1 个答案:

答案 0 :(得分:3)

所以我能从头脑中解决这个问题的方法是使用一个hashmap,其中不同的用户(即A,B,C,D等)将是键,并且与每个键相关的值将是是"转弯"他们离开了。然后你可以简单地遍历地图,检查"用户"还有更多"转弯"离开,如果他们这样做,则处理它,如果他们不这样做,则转到下一个"用户"。

编辑:使用受互斥锁保护的数组或某些线程安全的有序对象来保存正在处理的每个用户。还要将用户添加到concurrenthashmap作为键,其中与每个键关联的值是完成之前的步骤数。有另一个变量保存列表中的当前位置。