线程池有哪几种?5种最常见线程池详解

线程池有哪几种?5种最常见线程池详解-mikechen

线程池有哪几种经常在Java面试被问到,下面我就来详解常见的6种线程池种类与区别@mikechen

1.固定大小线程池

采用newFixedThreadPool实现,该线程池在初始化时就创建固定数量的线程,线程数不变。

固定大小线程池示例:

ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
    executorService.execute(new Task(i));
}
executorService.shutdown();

这种线程池适合任务量比较稳定的场景。

 

2.缓存线程池

第二种线程池是 CachedThreadPool,可以称作可缓存线程池,采用newCachedThreadPool实现。

如下所示:

ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    executorService.execute(new Task(i));
}
executorService.shutdown();

当线程池中的线程空闲一定时间后,会自动销毁这些线程,这种线程池适合短时间内需要大量线程的场景。

 

3.单线程线程池

该线程池只有一个线程,所有任务都按照先后顺序依次执行,采用newSingleThreadExecutor实现。

如下所示:

ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
    executorService.execute(new Task(i));
}
executorService.shutdown();

这种线程池适合需要顺序执行任务,保证任务按照一定顺序执行的场景。

 

4.定时线程池

这个线程池就是为了定时而发明的,它支持定时或周期性执行任务,比如:10秒钟执行一次任务。

采用newScheduledThreadPool实现,如下所示:

public class ThreadPoolMain {

    public static void main(String[] args) {
        ScheduledExecutorService service  =  Executors.newScheduledThreadPool(10);

        Runnable task01 = new Runnable() {
            @Override
            public void run() {
                String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));
                System.out.println(time+":schedule 执行了");
            }
        };

        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));

        System.out.println(time+":开始执行");
        service.schedule(task01,  10,  TimeUnit.SECONDS);

    }
}

newScheduledThreadPool(int n) 创建一个固定大小的线程池,其中包含 n 个线程,可以用来执行定时或周期性任务。

 

5.分治线程池

分治线程池:该线程池将大任务分割成多个小任务,并将这些小任务提交到线程池中执行。

如下所示:

ForkJoinPool forkJoinPool = new ForkJoinPool();
Task task = new Task(0, 100);
forkJoinPool.invoke(task);

该线程池可以将多个小任务并行执行,从而加速大任务的执行速度,这种线程池适合需要处理大量数据或执行时间较长的任务的场景。

以上就是常见的线程池的种类详解,更多线程,请查看:线程池超详解(原理流程参数及创建使用)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法