Closed robin-g-20230331 closed 9 months ago
@robin-g-20230331 收到。我先理解确认一下问题,然后再想想如何修改好。
@robin-g-20230331
ScheduledFutureTask
v2.14.4
:
https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.14.4Thanks for your professional issue and solution 💗 @robin-g-20230331
问题及其示例代码
调度线程池设置了任务
cancel
后清理队列的策略;但是任务取消后,队列任务并没有清除。原因
在调度池里,任务都会被修饰为
ScheduledFutureTask
放入队列,并返回ScheduledFutureTask
类型的future
,ScheduledFutureTask
在cancel
时,会调用ThreadPoolExecutor
的remove
方法,而TTL Agent
会将ScheduledFutureTask
重新装饰为TtlRunnable
。ScheduledThreadPoolExecutor
中的队列清理方法中的定位逻辑如下,可以明显看到,该方法只会返回-1
。并且,如果这个队列很长,会导致性能非常差。
修复建议
remove
方法不增强。或者判断下类型,如果是ScheduledFutureTask
类型,就不增强。