java - 无法维护java多线程中生产者任务的顺序

标签 java multithreading producer

我正在编写一个多线程应用程序,其中有 n 个尝试向共享资源添加元素的生产者。我想维护生产者在共享资源中生产元素的顺序。

例如,我的共享资源是 SynchronizedQueue,P1、P2、P3、P4 将按 p1、p2、p3、p4 的顺序生成新元素,在此期间 P5 生产者将其元素添加到队列中,所以 P1、P2、P3、P4 将等待锁。一旦 P5 释放锁,P1-4 中的任何一个都将获得锁,因此我们松散了元素的顺序。

有没有办法维护等待锁的元素的顺序?根据我的理解,这是不可能的,但我想检查这是否可以通过编程方式实现。

最佳答案

我能想到的一种方法是创建一个包装类 PriorityP,它具有字段 int priorityP value

然后您为每个线程分配一个优先级 (int),该线程作为结果给出具有适当优先级和值的 PriorityP

现在,您可以使用 PriorityBlockingQueue代替您的 SynchronizedQueue,并实现 Comparator PriorityP 类中的接口(interface)。

当你这样做时,每当一个线程将他的值输入队列时,它就会自动放在正确的位置。

关于java - 无法维护java多线程中生产者任务的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756650/

相关文章:

java - 在 Java Swing GUI 中让线程不断运行和更新文本框的最佳方法是什么

c++ - 多线程应用程序中的独立日志记录

java - ActiveMQ http 连接错误

java - 验证异常 : Unable to find a default provider

java - 本地日期 : format with locale

java - MDC(映射诊断上下文)支持 JUL(Java.util.Logging)

android - 如何使用多个 AsyncTask 同步应用程序

.NET 消费者/生产者(队列)

python - 使用 python/mod_wsgi 的多个生产者、单个消费者

java - 获取特定 JTable 单元格中的前景(字体)