背景
对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。
随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用forkjoin实现并行处理。
那么并行和并发又有什么区别?究竟改如何选择?滥用时又会有什么影响?
这些问题我分以下几篇文章进行详细说明:
1. 多线程并发和并行的区别
2. parallelStream()并行滥用的后果
3. forkjoin和forkjoinpool讲解
4. 线程池正确用法(本文)
为什么用线程池
- 用线程池之前有一个问题,就是为什么用多线程?
由于io等待存在,单线程在web开发上是对cpu极大的浪费(tomcat就是线程池的),多线程是必须的。 - 线程池解决的问题
- 减小线程池创建和销毁销毁的性能(java线程是内核创建)
- 线程池提供了队