JDK自带的线程池,使用Executors创建。
(Executors:创建线程池的工具类)
ExecutorService es = Executors.newFixedThreadPool(int nThreads);
1)newFixedThreadPool:
固定线程数量,该线程池中的线程数量始终不变,不会再创建新的线程,也不会销毁已经创建好的线程,自始至终都是那几个固定的线程在工作。采用队列的存放方式,不能及时处理任务。
用于负载比较重的服务器,为了资源的合理利用,需要限制当前线程数量;
2)newCachedThreadPool:
线程数量不确定,根据实际情况动态调整。线程池中的线程都有一个“保持活动时间”的参数,如果线程池中的空闲线程的空闲时间超过该“保持活动时间”则立刻停止该线程,默认的“保持活动时间”为60s。
用于并发执行大量短期的小任务,或者是负载较轻的服务器;
3)newScheduledThreadPool:
控制线程池内线程定时或周期性执行任务。
用于需要多个后台线程执行周期任务,同时需要限制线程数量的场景;
4)newSingleThreadExecutor:
只有一个线程,每次只能执行一个线程任务,按FIFO方式执行任务队列中的任务,不能及时处理任务。
用于串行执行任务的场景,每个任务必须按顺序执行,不支持并发执行;
5)newSingleThreadScheduledExecutor:
只有一个线程,可以控制线程池内线程定时或周期性执行某任务。
用于需要串行执行周期任务的场景;