如果spring SimpleAsyncTaskExecutor超出了concurrencyLimit,事件将如何处理?

时间:2019-03-29 09:54:14

标签: java spring asynchronous

我将事件监听器注释为@async,并使用SimpleAsyncTaskExecutor生成具有set concurrencyLimit的新线程。如果在同一时间发布事件超出concurrencyLimit会发生什么情况?它将被忽略还是只是等待免费的执行者?如果等待,它将阻止发布事件的主线程吗?

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

1 个答案:

答案 0 :(得分:1)

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

顾名思义,该执行程序非常简单。 ThreadPoolTaskExecutor是更好的选择:它重用线程,并通过定义RejectedExecutionHandler来让您在达到极限时选择做什么。