我正在编写一个多线程应用程序,其中有 n 个尝试向共享资源添加元素的生产者。我想维护生产者在共享资源中生产元素的顺序。
例如,我的共享资源是 SynchronizedQueue,P1、P2、P3、P4 将按 p1、p2、p3、p4 的顺序生成新元素,在此期间 P5 生产者将其元素添加到队列中,所以 P1、P2、P3、P4 将等待锁。一旦 P5 释放锁,P1-4 中的任何一个都将获得锁,因此我们松散了元素的顺序。
有没有办法维护等待锁的元素的顺序?根据我的理解,这是不可能的,但我想检查这是否可以通过编程方式实现。
最佳答案
我能想到的一种方法是创建一个包装类 PriorityP
,它具有字段 int priority
和 P value
。
然后您为每个线程分配一个优先级 (int
),该线程作为结果给出具有适当优先级和值的 PriorityP
。
现在,您可以使用 PriorityBlockingQueue
代替您的 SynchronizedQueue
,并实现 Comparator
PriorityP
类中的接口(interface)。
当你这样做时,每当一个线程将他的值输入队列时,它就会自动放在正确的位置。
关于java - 无法维护java多线程中生产者任务的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756650/