如何创建线程池[通俗易懂]

如何创建线程池[通俗易懂]如何创建线程池

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在开发中有时候会需要异步操作,这个时候就需要自己写个线程,但是每次都需要重复写代码非常不方便也不安全,所以线程池就是更好的选择。那么如何创建一个线程池呢?

首先会想到使用Executors创建线程池,因为这是java中的工具类,提供工厂方法来创建不同类型的线程池。
在这里插入图片描述
从上图中也可以看出,Executors的创建线程池的方法,创建出来的线程池都实现了ExecutorService 接口。常用方法有以下几个:
newFiexedThreadPool(int Threads):创建固定数目线程的线程池。

newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。

newSingleThreadExecutor() 创建一个单线程化的Executor。

newScheduledThreadPool(int corePoolSize) 创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

类看起来功能还是比较强大的,又用到了工厂模式、又有比较强的扩展性,重要的是用起来还比较方便,如:

ExecutorService executor = Executors.newFixedThreadPool(nThreads) ;

即可创建一个固定大小的线程池。虽然看起来很美好,却不鼓励大家使用。甚至在阿里Java 开发手册中是禁止使用的。
在这里插入图片描述
可以看出,不仅禁止使用,也给出了禁止使用的理由:就是Executors创建的线程其队列长度和允许创建的线程数太大了,可能导致内存溢出。既然知道了原因,那么我们创建线程池的时候指定堵塞队列长度和最大线程数不就好了?是的,所以开发手册也给出了解决方案,避免使用Executors创建线程池,主要是避免使用其中的默认实现,那么我们可以自己直接调用ThreadPoolExecutor的构造函数来自己创建线程池。在创建的同时,给BlockQueue 指定容量就可以了。如下:

private static ExecutorService executor = new ThreadPoolExecutor(10, 20,
60L, TimeUnit.SECONDS,
new ArrayBlockingQueue(10));

接下来看看该构造方法:

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) { 
   
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }

可以看出,自定义线程池的时候,指定了核心线程数、最大线程数、阻塞队列长度等。这样就不会因为队列长度或者线程数太多而发生内存溢出了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187076.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • UVa 10054 : The Necklace 【欧拉回路】

    UVa 10054 : The Necklace 【欧拉回路】

  • phpstrom激活码2021 3月最新注册码「建议收藏」

    phpstrom激活码2021 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 数据分析统计

    数据分析统计

  • 实现ipv4和ipv6转换

    #include#include#ifdef_WIN32#define_WINSOCK_DEPRECATED_NO_WARNINGS#include<WS2tcpip.h>#else#include<arpa/inet.h>#endifintinet4_pton(constchar*cp,uint32_t&ap){uint32_tacc=0;uint32_tdots=0;uint32_taddr=0;uin

  • Proteus使用教程并仿真51程序——LED流水灯

    Proteus使用教程并仿真51程序——LED流水灯目录一、安装Proteus软件二、熟悉Proteus软件三、51程序设计和仿真四、总结五、参考资料Proteus是LabCenterElectronics公司推出的一个EDA工具软件。Proteus具有原理布图、PCB自动或人工布线、SPICE电路仿真、互动电路仿真、仿真处理器及其外围电路等特点功能。一、安装Proteus软件下面来了解下如何安装Proteus软件,安装过程也十分简单。首先需要下载Proteus的压缩包,链接如下。链接:https://pan.baidu.com/s/1e

  • 服务器的基础知识_篮球小知识科普

    服务器的基础知识_篮球小知识科普“服务器”-互联网之魂服务器被誉为互联网之魂。我第一次见到服务器是在学校图书馆,是一种机架式服务器。第二次见到服务器是在公司机房,本期文章是对服务器进行大盘点和梳理,会介绍我拆装服务器过程,从中的学习感悟。一、服务器1.1服务器与PC机大部分程序员见到的服务器也就是云服务器,知名的那几家公司:阿里云、腾讯云…都是著名的云服务器提供厂商。在学校写个网站啥的,学生就可以优惠买买买。不过今天我们介绍的是服务器而非云服务器。在学校的时候,老师会说:“你们用的电脑也是服务器”。是的,那么现在我们来讨论,P

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号