1.Java线程池

Java通过Executors提供四种线程池,分别为:

  1. newSingleThreadExecutor创建一个单线程池,线程池中只有一个线程,必须要等待执行完一个任务,才能执行下一个任务
  2. newFixedThreadPool创建一个固定大小的线程池,支持定时及周期性任务执行。
  3. newCachedThreadPool创建一个可缓存线程的线程池,可以根据任务数量去创建线程个数
  4. newScheduledThreadPool创建一个可执行延时任务的线程池,本质上是固定线程个数的线程池,可以执行延时任务

1.newSingleThreadExecutor:

创建一个单线程池,线程池中只有一个线程,必须要等待执行完一个任务,才能执行下一个任务,示例代码如下:
Java四种线程池的基本用法
在单线程池中,必须要等上一个任务执行完成才能开始执行下一个任务,在此期间不会创建第二条线程。sleep方法是让线程休眠一秒钟。
Java四种线程池的基本用法
线程运行五个任务但是只会有一条线程。

2.newFixedThreadPool:

创建一个固定大小的线程池,支持定时及周期性任务执行。示例代码如下:
Java四种线程池的基本用法
比如说我创建了五个线程但是任务有八个,这个时候就先执行前面五个任务,等有空余的再接着执行剩下的三个任务。直到任务全部执行完成。
Java四种线程池的基本用法
先有五个线程开始执行五个任务,然后再等着五个任务有先执行完的运行接下来的三个任务。

3.newCachedThreadPool:

创建一个可缓存线程的线程池,可以根据任务数量去创建线程个数,示例代码如下:
Java四种线程池的基本用法
现在一个有五个任务在执行的时候就会创建五个线程,通俗来是就是有几个任务就创建几个线程,这就是可缓存线程的线程池。
Java四种线程池的基本用法
有五个任务就创建了五条线程开始执行这五个任务。

4.newScheduledThreadPool:

创建一个可执行延时任务的线程池,本质上是固定线程个数的线程池,可以执行延时任务,示例代码如下:
Java四种线程池的基本用法

表示延迟2秒之后再执行。
Java四种线程池的基本用法
每过两秒执行一次。

为什么要用线程池:

  1. 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
  2. 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存

Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。

相关文章: