线程池的好处:
- 降低资源你消耗
- 提高响应速度
- 提高线程的可管理性
线程池的处理流程:
- 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务
2、如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列
3、如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务
4、如果队列满了,而且正在运行的线程数量大于或等于 maximumPoolSize,那么线程池会抛出异常RejectExecutionException(拒绝策略可能是直接抛出异常、直接抛弃不执行、抛弃队列最前面的任务并重新执行任务、自定义策略)
Java 5+中的Executor接口定义一个执行线程的工具。它的子类型即线程池接口是ExecutorService。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,因此在工具类Executors面提供了一些静态工厂方法,生成一些常用的线程池,如下所示:
- newSingleThreadExecutor:创建一个单线程的线程池。适用于需要保证顺序地执行各个任务。
- newFixedThreadPool:创建固定大小的线程池。适用于满足资源管理的需求,而需要限制当前线程数量的应用场景,适用于负载较重的服务器。
- newCachedThreadPool:创建一个可缓存的大小无界的线程池。适用于很多的短期异步任务的小程序,或者是负载较轻的服务器。
- newScheduledThreadPool:创建一个大小无限的线程池。适用于多个后台线程执行周期任务,同时为了满足资源管理的需求而需要限制后台线程的数量的
网友评论