【发布时间】:2013-09-16 09:22:03
【问题描述】:
我正在编写一个多线程应用程序,其中有 n 个生产者试图将元素添加到共享资源。我想维护生产者在共享资源中生成元素的顺序。
例如,我的共享资源是一个 SynchronizedQueue,P1、P2、P3、P4 将按照 p1、p2、p3、p4 的顺序生成一个新元素,在此期间,P5 生产者将其元素添加到队列中,所以 P1、P2、P3、P4 将等待锁。一旦 P5 释放锁,P1-4 中的任何一个都将获得锁,因此我们松开了元素的顺序。
有没有办法保持等待锁的元素的顺序?据我了解,这是不可能的,但我想检查这是否可以通过编程方式实现。
【问题讨论】:
-
你想总是先插入 p1,还是插入顺序无关紧要,只是最后的队列按顺序排列了元素 p1、p2、p3、p4 和 p5?
-
你的意思是同步队列吗?如果没有,SynchronizedQueue 来自哪个库,或者如果是你自己的实现,我们可以看到代码吗?
-
插入的顺序应该取决于生产者。假设顺序如下:生产者1 - p1 - t1,生产者3- p3 - t2,生产者4 - p4 - t3,生产者2 - p2 - t4,时间顺序为t1
-
正确地说,这个问题与饥饿有关。我开始知道 java 中的重入锁具有可用于避免这种饥饿的公平参数。
标签: java multithreading producer