首页 理论教育 Executor中的任务线程池优化方案

Executor中的任务线程池优化方案

时间:2023-06-29 理论教育 版权反馈
【摘要】:Executor是构建在线程池之上的任务执行器。在Executor中使用线程池可以减少在创建和销毁线程上所花的时间和系统资源开销。Executor中使用的是CachedThreadPool,使用这种类型线程池的好处是,任务比较多时可以自动新增处理线程,而任务比较闲时自动回收空闲线程。Executor中的线程池的源代码定义如下所示。CoarseGrainedExecutorBackend调用Executor的launchTask方法,在方法中将会新建Task-Runner,然后放入线程池进行处理。

Executor中的任务线程池优化方案

Executor是构建在线程池之上的任务执行器。在Executor中使用线程池可以减少在创建和销毁线程上所花的时间和系统资源开销。如果不使用线程池,可能造成系统创建大量的线程而导致消耗完系统内存,以及出现“过度切换”。

在Executor中使用线程池基于以下两点原因,首先在Executor端执行的任务处理时间都比较短,需要频繁地创建和销毁线程,这样就带来了巨大的创建和销毁线程的开销,造成额外的系统资源开销;其次Executor中处理的任务数量巨大,如果每一个任务都创建一个线程,将导致消耗完系统内存,出现“过度切换”。

首先看一下Executor中的线程池。Executor中使用的是CachedThreadPool,使用这种类型线程池的好处是,任务比较多时可以自动新增处理线程,而任务比较闲时自动回收空闲线程。Executor中的线程池的源代码定义如下所示。(www.xing528.com)

CoarseGrainedExecutorBackend调用Executor的launchTask方法,在方法中将会新建Task-Runner,然后放入线程池进行处理。源代码如下。

从上面的源代码中可以看到,新建的TaskRunner对象首先放入runningTasks这样一个ConcurrentHashMap里面,然后使用线程池的execute方法运行TaskRunner,execute方法将会调用TaskRunner的run方法,在TaskRunner的run方法中执行计算任务。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈