首页常见问题正文

线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?

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

IT培训班

  线程池中的线程是在线程池启动时就创建好的,而不是在任务到来时才动态地创建线程。

  线程池中的线程创建过程通常包括以下步骤:

  1.初始化线程池参数,例如线程池大小、核心线程数、最大线程数、等待队列大小等。

  2.创建线程池中的核心线程。核心线程在线程池中始终存在,除非线程池被关闭。

  3.创建等待队列。等待队列是一个用于存储任务的缓冲区域,当线程池中的线程都在忙碌处理任务时,新到来的任务将会被放入等待队列中等待处理。

  4.如果当前任务数量超过了核心线程数,那么线程池会创建新的线程来处理任务,直到线程数达到最大线程数。

  5.如果等待队列已满,且线程数已达到最大线程数,那么线程池会根据定义的拒绝策略来拒绝新的任务。

  下面是一个简单的示例代码,展示了如何在Java中创建一个固定大小的线程池,线程池中的线程在初始化时就会被创建:

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

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池,大小为3
        ExecutorService executor = Executors.newFixedThreadPool(3);
        
        // 提交10个任务给线程池执行
        for (int i = 1; i <= 10; i++) {
            executor.execute(new Task(i));
        }
        
        // 关闭线程池
        executor.shutdown();
    }
    
    static class Task implements Runnable {
        private int taskId;
        
        public Task(int taskId) {
            this.taskId = taskId;
        }
        
        public void run() {
            System.out.println("Task #" + taskId + " is being executed by " + Thread.currentThread().getName());
        }
    }
}

  在上面的示例中,我们创建了一个固定大小的线程池,并提交了10个任务给线程池执行。在每个任务执行时,都会输出当前任务的编号以及执行任务的线程的名称。可以看到,每个任务都是由线程池中的一个线程来执行的,而不是每次都创建一个新的线程。

  总之,线程池中的线程是在启动时创建好的,并且会一直存在直到线程池被关闭。线程池的好处在于它可以重复使用已有的线程,避免了频繁地创建和销毁线程所带来的开销和资源浪费。

1681437505555_领取课程.jpg

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