首页常见问题正文

创建线程池有哪几种方式?

更新时间:2023-03-23 来源:黑马程序员 浏览量:

IT培训班

  在Java中,创建线程池有两种常见的方式:

  1.通过 Executors 工具类提供的静态方法创建线程池。

  2.通过 ThreadPoolExecutor 构造函数自定义线程池。

  下面是两种方式的代码示例:

  1. 通过 Executors 工具类提供的静态方法创建线程池:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {

    public static void main(String[] args) {
        
        // 创建固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 提交任务给线程池
        for (int i = 0; i < 10; i++) {
            executor.execute(new Task());
        }

        // 关闭线程池
        executor.shutdown();
    }

    static class Task implements Runnable {
        public void run() {
            System.out.println("Executing task on thread: " + Thread.currentThread().getName());
        }
    }
}

  2.通过 ThreadPoolExecutor 构造函数自定义线程池:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class ThreadPoolExample {

    public static void main(String[] args) {
        
        // 自定义线程池
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
            2, // 核心线程数
            5, // 最大线程数
            1, // 空闲线程存活时间
            TimeUnit.SECONDS, // 存活时间单位
            new LinkedBlockingQueue<Runnable>() // 任务队列
        );

        // 提交任务给线程池
        for (int i = 0; i < 10; i++) {
            executor.execute(new Task());
        }

        // 关闭线程池
        executor.shutdown();
    }

    static class Task implements Runnable {
        public void run() {
            System.out.println("Executing task on thread: " + Thread.currentThread().getName());
        }
    }
}

  在上面的示例中,我们创建了两个线程池,一个是固定大小的线程池,一个是自定义线程池。在两个线程池中,我们都提交了 10 个任务给线程池执行。每个任务都只是打印当前线程的名称。最后,我们调用了线程池的 shutdown() 方法关闭线程池。

分享到:
在线咨询 我要报名
和我们在线交谈!