一张图看懂线程池原理

  • 时间:2019-03-25 23:52 作者:yueyue_projects 来源:yueyue_projects 阅读:460
  • 扫一扫,手机访问
摘要:先把想说的话说在前面Java的线程池在设计上我觉得特别牛,其中最大的是能把两个甚至多个看上去原理不太相同的线程池类型,在不用if/else的语句的情况下,用相同的代码实现了线程池的定义及分类线程池顾名思义就是线程的集合的管理者,线程池可以对集合里面的线程进行增删查改等操作,Java中提供的线程池有如

先把想说的话说在前面

Java的线程池在设计上我觉得特别牛,其中最大的是能把两个甚至多个看上去原理不太相同的线程池类型,在不用if/else的语句的情况下,用相同的代码实现了

线程池的定义及分类

线程池顾名思义就是线程的集合的管理者,线程池可以对集合里面的线程进行增删查改等操作,Java中提供的线程池有如下几个,

  • newSingleThreadExecutor
  • newScheduleThreadPool
  • newSingleThreadScheduledExecutor
  • newCachedThreadPool
  • newFixedThreadPool
    这几类线程池的类型都是通过参数(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue)确定的。下面我们会用一张图来解释里面最重要的两个线程池一个是newCachedThreadPool,另一个是newFixedThreadPool,而后反向说明构造对应的线程池,这几个参数应该怎样取值。

线程池原理

  • newFixedThreadPool原理

    newFixedThreadPool原了解释图.png
    从图中可以看到newFixedThreadPool类型的解决任务的过程,当任务到来时,逻辑解决过程如下:
    newFixedThreadPool逻辑解决图
    通过上诉逻辑图我们可知,corePoolSize>0;maximumPoolSize>=0;keepAliveTime >= 0,workQueue需要是LinkedBlockingQueue对象;

  • newCachedThreadPool原理图

    image.png
    分析上图可知,corePoolSize=0由于其中么有corePoolSize的概念,maximumPoolSize>0由于需要有线程来解决,keepAliveTime > 0由于需要线程复用,假如等于0,则每次都会新建线程了。而最重要的workQueue的类型是SynchronousQueue,由于此线程池的实现需要有一个无缓冲的队列性质,简单来讲就是下一个任务到来时,会把前一个任务挤出去。

或者许可以总结这样一段话

newFixedThreadPool利用可缓冲的队列去等待无存活时长的线程执行结束以实现线程复用,newCachedThreadPool利用无缓冲的队列SynchronousQueuepoll函数去实现具备存活时间的线程以实现线程复用。所以根据他们两的特点,newFixedThreadPool的优势在于可以执行大量的耗时任务操作,而newCachedThreadPool对大量的耗时任务操作是没有优势的,起因在于,newCachedThreadPool对于大量的任务到来会导致线程数量急速膨胀,而newFixedThreadPool确可以将任务缓冲到队列中。newCachedThreadPool适合短平慢的业务。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】【Azure API Management】实目前API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account(2025-10-16 23:53)
【系统环境|】【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this opera...(2025-10-16 23:52)
【系统环境|】YouTube账号购买全攻略|点击查看原文购买|购买YouTube账号、油管号自动发货服务的优势与缺点 附:YouTube无法加载?可能是这个设置在作怪!(2025-10-16 23:52)
【系统环境|】【Azure Developer】Azure Automation 自动化账号生成的时候怎么生成连接 与证书 (Connection & Certificate)(2025-10-16 23:41)
【系统环境|】【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置(2025-10-16 23:40)
【系统环境|】近日,四川宜宾,某地下停车场内的监控拍到了一幕惊险的画面。危险!一汽车修理师傅正在修理一辆3吨重的悍马时,悍马车突然自己启动,眼看就要撞向前面的一辆灰色轿车了,一侧的修理师傅做出了一个令人始料不...(2025-10-16 23:38)
【系统环境|】iOS 能耗监控与电池优化实战:如何查看App耗电量、分析CPU、GPU内存使用、(uni-app iOS开发性能调试指南)(2025-10-16 23:37)
【系统环境|】《风流女管家》法国犯罪悬疑片--《风流女管家》法语高清全集免费在线无广告完整观看---《风流女管家》HD正版免费播放-手机电脑皆可看(2025-10-16 23:36)
【系统环境|】2025含金量排名前十计算机专业证书(2025-10-15 20:51)
【系统环境|】你有白帽众测 我有黑帽雇佣(2025-10-15 20:50)
手机二维码手机访问领取大礼包
返回顶部