Java 线程池 FixedThreadPool是Executors封装好的4种常见的功能线程池之一,是一个固定大小的线程池。本文主要介绍 FixedThreadPool的使用及示例代码。

1、FixedThreadPool简介

FixedThreadPool是只有核心线程,线程数量固定,执行完立即回收,任务队列为链表结构的有界队列。一般是用在控制线程最大并发数的使用场景。相对于通过使用 ThreadPoolExecutor 的方式,使用FixedThreadPool更方便,有些参数可能不需要设置,可以根据实现情况使用。

2、newFixedThreadPool源码

public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());
}
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>(),
                                  threadFactory);
}

3、使用示例

import java.util.concurrent.*;
import java.util.Date; 
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Main {
  public static void main(String[] args) throws Exception {
    
    ExecutorService fixedThreadPool = Executors.newFixedThreadPool    (3);
    // 创建需执行的任务
    Runnable task =new Runnable(){
      public void run() {
              Date date=new Date();
              DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              System.out.println(" 当前时间为:"+dateFormat.format(date));
      }
    };
    // 线程池添加任务
    fixedThreadPool.execute(task);
    //关闭线程池
    fixedThreadPool.shutdown();
    fixedThreadPool.awaitTermination(10000, TimeUnit.MILLISECONDS);
    System.exit(0); //success
  }
}

推荐文档