为什么需要线程池?
百度百科:
一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价
他人理解:
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。
那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?
创建销毁的代价
创建一个对象,需要经过类加载过程,
销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。
Java 线程池的核心类
ThreadPoolExecutor
为什么这是核心类?
因为Java中的Executors类创建的常见的4个线程池实现,都是用ThreadPoolExecutor的构造方法,然后传入不同的参数实现的。
Java中Executors的线程池实现
在java doc中,并不提倡我们直接使用ThreadPoolExecutor,
而是使用Executors类中提供的几个静态方法来创建线程池:
1、newFixedThreadPool (固定数