ThreadPoolTask​​Executor bean中的同步队列公平策略?

时间:2015-03-24 12:53:29

标签: java multithreading spring threadpool threadpoolexecutor

我有以下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 documentation for SynchronousQueue说以下内容:

  

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

我的问题是:如何指定我的bean配置中的订单公平性?

谢谢!

1 个答案:

答案 0 :(得分: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));
    }
}