• 核心线程数(Core Pool Size):线程池中最小的线程数量。即使线程池中没有任务要执行,核心线程也会一直存在,不会被销毁。
  • 最大线程数(Maximum Pool Size):线程池中最大的线程数量。当任务数量超过核心线程数时,线程池会创建新的线程,直到达到最大线程数。
  • 空闲线程存活时间(Keep-Alive Time):当线程池中的线程数量超过核心线程数,且空闲时间达到指定时间时,多余的线程会被销毁,保持线程池的大小不超过核心线程数。
  • 任务队列(Work Queue):用于保存待执行的任务的队列。当线程池中的线程都在执行任务且任务数量达到最大线程数时,新提交的任务会被放入任务队列中等待执行。
  • 拒绝策略(Rejected Execution Handler)。拒绝策略定义了当线程池已满并且任务队列也已满时,如何处理新提交的任务。

    /**
     * @document: 编写使用自定义参数创建 Java 线程池
     * @Author:SmallG
     * @CreateTime:2023/8/21+18:51
     */
    
    public class CustomThreadPool {
      public static void main(String[] args) {
          //定义线程池参数
          int corePoolSize = 3; // 核心线程数
          int maximumPoolSize = 20; // 最大线程数
          long keepAliveTime = 20; //空闲线程存活时间
          int queueCapacity = 50; //任务队列
    
          //创建自定义线程
          ThreadPoolExecutor executor = new ThreadPoolExecutor(
                  corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS,
                  new LinkedBlockingDeque<>(queueCapacity),
                  new ThreadFactoryBuilder().setNameFormat("Worker-%d").build(),
                  new ThreadPoolExecutor.AbortPolicy()
          );
    
          //向线程池提交任务
          for (int i = 1; i <= 50; i++) {
              final int taskId = i;
              executor.submit(() -> {
                  System.out.println(Thread.currentThread().getName()
                          + " is running task" + taskId);
              });
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
          //关闭线程池
          executor.shutdown();
      }
    }
最后修改:2023 年 08 月 22 日
如果觉得我的文章对你有用,请随意赞赏