并发下线程池的使用
创建线程池
线程池创建的好处是减少在创建和销毁线程上所消耗的时间和资源,解决资源不足的问题,通过继承thread类,实现runable接口或者callable接口开启线程,容易造成同类线程的大量创建、从而导致消耗完内存或者过度切换问题。
ThreadPoolExecutor是阿里开发手册和诸多开发者推荐使用创建线程池的,因为可以使初学者对线程池的运行规则更加明确,规避资源耗尽的风险,有些同学,也比较习惯用Executors进行线程池的创建,但是Executors创建返回的线程池对象有如下弊端:
1、fixedThreadPool 和singleThreadPool ,允许的请求队列的长度为Integer.MAX_VALUE,当大量请求来的时候,可能会造成大量请求的堆积,从未导致OOM
2、cachedThreadPool ,允许创建的线程数量为Integer.MAX_VALUE,可能会创建大量的线程,从而造成OOM
名词解析:
线程池的处理逻辑
线程池的处理流程(threadpoolExecutor)
线程池队列
arrayBlockingQueue:
线程池的拒绝策略
abortPolicy:
线程的提交方式(有无需要结果返回)
submit:
excute: