线程池之newFixedThreadPool定长线程池的实例
newFixedThreadPool定长线程池的实例
newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newFixedThreadPool固定线程池, 使用完毕必须手动关闭线程池, 否则会一直在内存中存在。
示例代码:
public class ThreadPoolFixed {
public static void main(String[] args) {
//设置线程池大小为3
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
final int index = i;
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(index+"当前线程"+Thread.currentThread().getName());
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
fixedThreadPool.shutdown();
}
}
运行结果:

因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()。
corePoolSize:
线程池的基本大小,即在没有任务需要执行的时候线程池的大小,并且只有在工作队列满了的情况下才会创建超出这个数量的线程。
这里需要注意的是:在刚刚创建ThreadPoolExecutor的时候,线程并不会立即启动,而是要等到有任务提交时才会启动,除非调用了prestartCoreThread/prestartAllCoreThreads事先启动核心线程。
再考虑到keepAliveTime和allowCoreThreadTimeOut超时参数的影响,所以没有任务需要执行的时候,线程池的大小不一定是corePoolSize。
maximumPoolSize:
线程池中允许的最大线程数,线程池中的当前线程数目不会超过该值。
如果队列中任务已满,并且当前线程个数小于maximumPoolSize,那么会创建新的线程来执行任务。
这里值得一提的是largestPoolSize,该变量记录了线程池在整个生命周期中曾经出现的最大线程个数。
为什么说是曾经呢?因为线程池创建之后,可以调用setMaximumPoolSize()改变运行的最大线程的数目。
poolSize:
线程池中当前线程的数量,当该值为0的时候,意味着没有任何线程,线程池会终止;同一时刻,poolSize不会超过maximumPoolSize。
定长线程池简易原理图及实现思路

队列中存放着实现了runnable接口的对象。每次有新任务的时候,就会往队列中push进一个对象。线程1-4需要定义为继承了Tread类的内部,在类中的run方法中,定一个while循环,不断的轮询送队列中取对象,执行对象中的run方法。
线程中需要存放着线程池的对象的指针,便于获取到线程池对象的队列。
当然,这个线程是是定长的。有些情况下,定长的数量不够,或者高峰期过后,长度需要降下来。这时候,就需要变长的线程池了。后续继续更新支持动态扩展的线程池的实现思路。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot监听应用程序启动的生命周期事件的四种方法
在 Spring Boot 中,监听应用程序启动的生命周期事件有多种方法,本文给大家就介绍了四种监听应用程序启动的生命周期事件的方法,并通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下2024-07-07
Java中的ArrayList、LinkedList、HashSet等容器详解
这篇文章主要介绍了Java中的ArrayList、LinkedList、HashSet等容器详解,集合表示一组对象,称为其元素,有些集合允许重复元素,而另一些则不允许,有些是有序的,有些是无序的,需要的朋友可以参考下2023-08-08
详解如何为SpringBoot项目中的自定义配置添加IDE支持
这篇文章主要介绍了详解如何为SpringBoot项目中的自定义配置添加IDE支持,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-02-02
MAC上IntelliJ IDEA的svn无法保存密码解决方案
今天小编就为大家分享一篇关于MAC上IntelliJ IDEA的svn无法保存密码解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-10-10


最新评论