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
}
}