java线程池的四种创建方式详细分析

 更新时间:2022年07月14日 10:15:10   作者:码农研究僧  
这篇文章主要介绍了java线程池的四种创建方式详细分析,连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用

前言

在讲述线程池的前提 先补充一下连接池的定义

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用

可以看到其连接池的作用如下:

1. 线程池

线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度

特点:

  • 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的销耗。提高响应速度: 当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性: 线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

其功能为:

重用存在的线程,减少对象创建、消亡的开销可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。提供定时执行、定期执行、单线程、并发数控制等功能。

具体其架构如下所示:

2. 创建方式

一共有4种创建方式分别为一池一线程、一池n线程、一池可扩容线程、一池定时及周期线程

Executors.newFixedThreadPool(int)一池N线程,控制最大的并发数,超出的线程会在队列中等待

ExecutorService threadPool1 = Executors.newFixedThreadPool(5); //5个窗口

Executors.newSingleThreadExecutor()一池一线程

 ExecutorService threadPool2 = Executors.newSingleThreadExecutor(); //一个窗口

Executors.newCachedThreadPool()一池可扩容根据需求创建线程,可灵活回收空闲线程
执行完线程,可不用再扩建继续使用

 ExecutorService threadPool3 = Executors.newCachedThreadPool();

Executors.newScheduledThreadPool(),支持定时及周期性任务执行

//表示延迟一秒,后执行3秒
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
      @Override
      public void run() {
          log.info("delay 1 seconds, and excute every 3 seconds");
 
      }
}, 1, 3, TimeUnit.SECONDS);

到此这篇关于java线程池的四种创建方式详细分析的文章就介绍到这了,更多相关java线程池创建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解java如何调用代理ip

    详解java如何调用代理ip

    在进行网络爬虫、数据采集或是访问网站时,使用代理IP显得尤为重要,本文将深入探讨如何在Java中调用代理IP,感兴趣的小伙伴可以了解一下
    2024-11-11
  • Java中的final关键字深入理解

    Java中的final关键字深入理解

    这篇文章主要介绍了Java中的final关键字深入理解的相关资料,需要的朋友可以参考下
    2017-02-02
  • 解决FeignClient Get请求参数接收不到的问题

    解决FeignClient Get请求参数接收不到的问题

    在使用FeignClient进行GET请求时,如果参数接收不到,通常是因为Feign默认将参数绑定为@RequestBody,而GET请求无法包含请求体,解决方法是在Feign接口中为参数添加@RequestParam注解,或者在SpringMVC的Controller中使用@RequestBody接收参数
    2024-11-11
  • Java使用组件编写窗口实现网上文件下载

    Java使用组件编写窗口实现网上文件下载

    这篇文章主要为大家详细介绍了Java使用组件编写窗口实现网上文件下载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • idea中@Autowired注解下变量报红的解决

    idea中@Autowired注解下变量报红的解决

    这篇文章主要介绍了idea中@Autowired注解下变量报红的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • mybatis项目实现动态表名的三种方法

    mybatis项目实现动态表名的三种方法

    有时在开发过程中java代码中的表名和数据库的表名并不是一致的,此时我们就需要动态的设置表名,本文主要介绍了mybatis项目实现动态表名的三种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Jenkins初级使用过程中的异常处理

    Jenkins初级使用过程中的异常处理

    这篇文章主要为大家介绍了Jenkins初级使用过程中的异常处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • JVM内存模型/内存空间:运行时数据区

    JVM内存模型/内存空间:运行时数据区

    这篇文章主要介绍了JVM内存模型/内存空间的相关资料,帮助大家更好的理解和学习Java虚拟机,感兴趣的朋友可以了解详细,希望能够给你带来帮助
    2021-08-08
  • java swing实现的扫雷游戏及改进版完整示例

    java swing实现的扫雷游戏及改进版完整示例

    这篇文章主要介绍了java swing实现的扫雷游戏及改进版,结合完整实例形式对比分析了java使用swing框架实现扫雷游戏功能与相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • idea如何通过maven指定JDK版本

    idea如何通过maven指定JDK版本

    这篇文章主要介绍了idea如何通过maven指定JDK版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论