【发布时间】:2015-01-02 05:33:13
【问题描述】:
我有一个PriorityBlockingQueue。单个线程一次使用此队列中的一条消息并对其进行处理。其他几个线程正在将消息插入队列。生产者线程为他们提交的每条消息分配一个完整的优先级。静态AtomicLong 用于为每条消息分配一个唯一的、单调递增的ID。队列的Comparator先按此优先级对消息进行排序,然后同等优先级的消息按ID排序(ID最低的在前)。
问题:有时一个生产者会提交大量消息。然后,这会使其他生产者无法处理他们的消息。我想做的是在生产者之间进行消费者循环以获取相同优先级的消息(同时仍按提交顺序处理单个生产者的同等优先级消息)。但我不知道如何编写 Comparator 来做到这一点。
我考虑的另一种选择是为每个生产者设置一个单独的队列。但是,我认为这行不通,因为我不知道单线程在多个队列上等待的任何方式。
【问题讨论】:
标签: java multithreading priority-queue java.util.concurrent round-robin