java - 如果spring SimpleAsyncTaskExecutor超过concurrencyLimit,事件会发生什么?

标签 java spring asynchronous

我有一个注释为 @async 的事件监听器,并使用 SimpleAsyncTaskExecutor 来生成设置了 concurrencyLimit 的新线程。如果我同时发布的事件超过 concurrencyLimit 会发生什么?它将被忽略或只是等待空闲执行器?如果等待,会阻塞发布事件的主线程吗?

不幸的是我无法模拟这种情况。

最佳答案

execute() 方法在创建新线程之前使用类 ConcurrencyThrottleSupport处理并发限制;如果达到限制,此类使用等待/通知逻辑来阻止调用线程。在阻止调用者之前,此类会记录一条调试消息。

顾名思义,这个执行器非常简单。一个ThreadPoolTaskExecutor是一个更好的选择:它重用线程,并让您通过定义 RejectedExecutionHandler 来选择达到限制时要执行的操作。 .

关于java - 如果spring SimpleAsyncTaskExecutor超过concurrencyLimit,事件会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414724/

相关文章:

java - ArrayList 或 Linked List - 如果要执行插入/删除和查找操作,则使用哪个集合

java - JBoss 7 类加载奇迹

java - 如何将以下基于 xml 的 spring bean 转换为基于 java 注释的 bean?

java - Spring 中的 @Qualifier 注解不起作用

java - Spring Boot Data JPA 问题——创建具有名称的 bean 时出错

java - AsyncRestTemplate ListenableFuture<T> 回调 + 超时

java - 如何在 Java 8 中使用 reduce 从对象列表创建字符串列表?

java - 带有 TextWatcher 的 EditText 显示有线行为并在递归循环中移动

Spring Data Repository 异步保存

javascript - NodeUnit - 测试异步函数