gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:54 24 4
gpt4 key购买 nike

我正在编写一个多线程应用程序,其中有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com