线程池任务执行器中同步队列的公平策略是什么?

3

I have the following bean

<bean id="executor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="1" />
    <property name="maxPoolSize" value="1" />
    <!-- Positive value leads to LinkedBlockingQueue,
        any other value leads to SynchronousQueue -->
    <property name="queueCapacity" value="0" />
</bean>
Oracle SynchronousQueue文档中提到:

此类支持可选的公平策略,以对等待生产者和消费者线程进行排序。默认情况下,不保证此排序。但是,使用fairness设置为true构建的队列按FIFO顺序授予线程访问权限。

我的问题是:如何在我的bean配置中指定我想要有顺序公平性?

谢谢!

1个回答

2
我不确定为什么您需要一个公平的同步队列,并按FIFO顺序管理线程访问。我从未在实际中见过这种情况,也不确定即使您管理了FIFO,您的应用程序是否能正常工作。
但是,如果您确实需要,您可以扩展ThreadPoolTaskExecutor,并像这样覆盖createQueue()方法 -
public class FairThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
    protected BlockingQueue<Runnable> createQueue(int queueCapacity) {
        return (BlockingQueue) (queueCapacity > 0 ? new LinkedBlockingQueue(queueCapacity) : new SynchronousQueue(true));
    }
}

谢谢,这是一种方法...我以为线程池任务执行器可能有属性,但看起来并没有。干杯 - zkristic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接