📜  newFixedThreadPool方法(1)

📅  最后修改于: 2023-12-03 15:17:51.695000             🧑  作者: Mango

newFixedThreadPool方法

Java中的newFixedThreadPool(int n)方法是在执行任务时使用线程池的一种方式。n是指并发线程的数量,固定线程池中的线程数,不会更改,当线程不足时,任务将被放入队列中等待执行。

语法
ExecutorService executor = Executors.newFixedThreadPool(int numThreads);

该方法返回一个ExecutorService,可用于执行任务。

参数

numThreads:线程池中的线程数,即同时执行的最大线程数量。

特点
  • 创建一个固定大小的线程池。
  • 当线程池中的线程用尽时,任务会被放入队列中等待执行。
  • 线程数固定,线程无法被重复使用。
  • 任务队列通过LinkedBlockingQueue实现。
示例
public class FixedThreadPoolExample {
    public static void main(String[] args) {
        // 创建一个线程池,大小为3
        ExecutorService threadPool = Executors.newFixedThreadPool(3);

        // 提交10个任务
        for (int i = 1; i <= 10; i++) {
            int finalI = i;
            threadPool.submit(() -> {
                System.out.println("任务" + finalI + "执行开始...");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("任务" + finalI + "执行结束...");
            });
        }

        // 终止线程池
        threadPool.shutdown();
    }
}

输出结果如下:

任务1执行开始...
任务2执行开始...
任务3执行开始...
任务1执行结束...
任务4执行开始...
任务5执行开始...
任务6执行开始...
任务2执行结束...
任务7执行开始...
任务8执行开始...
任务9执行开始...
任务3执行结束...
任务10执行开始...
任务4执行结束...
任务5执行结束...
任务6执行结束...
任务7执行结束...
任务8执行结束...
任务9执行结束...
任务10执行结束...

从输出结果可以看到,线程池中一开始创建了3个线程,并同时执行了3个任务。当有任务执行结束后,其他任务才开始占用线程执行。最后,所有任务被按顺序执行完毕。

总结

使用newFixedThreadPool()方法可以创建一个固定大小的线程池,可以避免线程数量超过系统限制,从而提高代码的性能和可靠性。使用固定大小的线程池还可以避免一些任务由于线程不断增加导致的性能下降和系统崩溃。因此,在开发中需要合理地选择合适的线程池方法,并根据需求选择合适的参数。