Java线程池详解

一、简介

什么是线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。虽然我们可以使用new的方式去创建线程,但若是并发线程太高,每个线程执行时间不长,这样频繁的创建销毁线程是比较耗费资源的,同时也不方便管理,线程池的出现就是为了解决上述问题。

线程池的优点

  1. 提高响应速度:通过线程池创建的线程,使用时直接通过线程池获取,不再需要手动创建线程,可以复用,及时响应。
  2. 降低资源的消耗:由于线程池被池化管理了,我们无需频繁地去创建销毁线程,那么资源消耗自然就降低了。
  3. 便于管理和监控:因为我们的工作线程都来自于线程池中,线程池可以对线程进行管理、监控、调优。

一个简单的线程池示例


public static void main(String[] args) {
   
        //创建含有5个线程的线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        //提交5个任务到线程池中
        for (int i = 0; i < 5; i++) {
   
            final int taskNo = i;
            threadPool.execute(() -> {
   
                System.out.println("执行任务:"+taskNo);
            });
        }
        //关闭线程池
        threadPool.shutdown();
        //如果线程池还没达到Terminated状态,说明线程池中还有任务没有执行完
        while (!threadPool.isTerminated()) {
   

        }
    }

输出结果:

执行任务:0
执行任务:4
执行任务:3
执行任务:2
执行任务:1

二、线程池的创建方式

线程池的创建方式可分为以下两类:

  • 通过 Executors 创建线程池
  • 通过 ThreadPoolExecutor 创建线程池

1、通过Excutors创建线程池

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

  • ExecutorService:真正的线程池接口,提供了执行、管理和控制任务的方法。

  • ScheduledExecutorService:继承自ExecutorService,能够解决那些需要任务重复执行的问题,支持定时和周期性任务执行。

  • ThreadPoolExecutor:ExecutorService的默认实现,提供了丰富的配置选项,如核心线程数、最大线程数、工作队列类型等。

  • ScheduledThreadPoolExecutor:继承自ThreadPoolExecutor的ScheduledExecutorService接口实现,用于周期性任务调度。

Java中通过Executors工厂类提供了四种线程池&#x

你可能感兴趣的:(java,开发语言)