具有优先级等待列表的ArrayBlockingQueue

时间:2018-03-02 12:04:09

标签: java concurrency

我目前有一个Spring调度程序,可以确保基于有界队列的各种并发限制策略。

基本上,处理多个请求类型,一些内存昂贵,其他更少,并且请求线程发生内存昂贵的任务将一个令牌放入有界阻塞队列(ArrayBlockingQueue),因此它们中只有N个实际上最终跑步,而另一端则等待。

现在,等待列表由ReentrantLock在内部管理,ReentrantLock又利用AbstractQueuedLongSynchronizer中的Condition实现基金,该基金使用链接列表,当从队列中删除令牌时,该链接列表会通知最长的等待线程。

现在我需要一个不同的行为,因此条件维护的列表也按用户定义的优先级排序(直接一个,低优先级请求不需要反饥饿措施)。

不幸的是,有问题的课程有一层“最终”声明,这使得很难注入这种看似很小的行为改变。

是否有任何并发​​数据结构提供我正在寻找的行为,或者允许自定义? 或者,建议实现它而不从头开始重写ArrayBlockinQueue / ReentrantLock / Condition?

注意:真的在等待列表中寻找具有优先级的有界阻塞队列,其他需要重新设计整个应用程序的方法,次要执行线程池等是不可行的(时间和材料限制)

0 个答案:

没有答案