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

标签 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说如下:

This class supports an optional fairness policy for ordering waiting producer and consumer threads. By default, this ordering is not guaranteed. However, a queue constructed with fairness set to true grants threads access in FIFO order.

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

谢谢!

最佳答案

我不确定为什么您需要一个公平的同步队列并按 FIFO 顺序管理线程访问。我从未真正见过这种情况,也不确定即使您管理 FIFO,您的应用程序是否也能正常工作。

但如果您愿意,您仍然可以扩展 ThreadPoolTask​​Executor 并像这样覆盖 createQueue() -

public class FairThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
    protected BlockingQueue<Runnable> createQueue(int queueCapacity) {
        return (BlockingQueue) (queueCapacity > 0 ? new LinkedBlockingQueue(queueCapacity) : new SynchronousQueue(true));
    }
}

关于java - ThreadPoolTask​​Executor bean 中的同步队列公平策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233179/

相关文章:

java - 带有表格读取行的android表格布局

java - Primefaces DataTable 排序不正确

c# - 如何增加C#中的并行任务数

java - Spring 4 MVC 和 Websockets - 没有合适的默认 RequestUpgradeStrategy

java - 使用 Spring、Swing 和 SQLite 在 Java 中进行用户授权

java - JSF 限制

java - JVisualVM: "Local Applications Cannot Be Detected"

solaris - 多线程 printf 与 write(2) 缓冲

java - Timer.schedule() 执行后留下一个打开的线程

spring - 在Spring-Data-Redis中使用RedisTemplate时如何选择dbIndex?