Java 中的优先队列,因此每个生产者一次轮到一个回合

Priority queue in Java so each producer gets one turn at a time

如果我有多个用户(不可数),每个用户都在放置工作项 在队列上,我如何实现一个队列,以便每个用户在 一次?

例如,如果我有用户 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 等)将是与每个用户相关联的键和值关键是他们离开的 "turns" 的数量。然后你可以简单地遍历地图,检查 "user" 是否还有 "turns",如果有,处理它,如果没有,转到下一个 "user"。

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