我有以下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配置中的订单公平性?
谢谢!
答案 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));
}
}