我将事件监听器注释为@async,并使用SimpleAsyncTaskExecutor生成具有set concurrencyLimit的新线程。如果在同一时间发布事件超出concurrencyLimit会发生什么情况?它将被忽略还是只是等待免费的执行者?如果等待,它将阻止发布事件的主线程吗?
不幸的是,我无法模拟这种情况。
答案 0 :(得分:1)
在创建新线程之前,execute()
方法使用类ConcurrencyThrottleSupport
来处理并发限制;如果已达到限制,则此类使用等待/通知逻辑来阻止调用线程。在阻止调用方之前,此类会记录一条调试消息。
顾名思义,该执行程序非常简单。 ThreadPoolTaskExecutor
是更好的选择:它重用线程,并通过定义RejectedExecutionHandler
来让您在达到极限时选择做什么。