我有一个注释为 @async 的事件监听器,并使用 SimpleAsyncTaskExecutor 来生成设置了 concurrencyLimit 的新线程。如果我同时发布的事件超过 concurrencyLimit 会发生什么?它将被忽略或只是等待空闲执行器?如果等待,会阻塞发布事件的主线程吗?
不幸的是我无法模拟这种情况。
最佳答案
execute()
方法在创建新线程之前使用类 ConcurrencyThrottleSupport
处理并发限制;如果达到限制,此类使用等待/通知逻辑来阻止调用线程。在阻止调用者之前,此类会记录一条调试消息。
顾名思义,这个执行器非常简单。一个ThreadPoolTaskExecutor
是一个更好的选择:它重用线程,并让您通过定义 RejectedExecutionHandler
来选择达到限制时要执行的操作。 .
关于java - 如果spring SimpleAsyncTaskExecutor超过concurrencyLimit,事件会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414724/