多线程与高并发(八)
ThreadPool
目前提供两种类型的线程池,一种是普通的类型ThreadPoolExecutor,第二种就是ForkJoinPool。这两种是不同类型的线程池。
- ThreadPoolExecutor
- ForkJoinPool
在阿里JAVA开发手册中有说明到:线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
说明:线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式是为了规避资源耗尽的风险。
ThreadPoolExecutor
ThreadPool维护着两个集合,第一个是线程的集合,第二个是任务的集合。
线程池有7大参数:
ForkJoinPool
- 分解汇总的任务
- 用很少的线程可以执行很多的任务(子任务)TPE做不到先执行子任务
- CPU密集型