ThreadPoolExecutor创建线程池[通俗易懂]

ThreadPoolExecutor创建线程池[通俗易懂]java实现上传下载功能

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

Jetbrains全系列IDE稳定放心使用

利用ThreadPoolExecutor来创建线程池

一、引入依赖

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>16.0.1</version>
        </dependency>

二、直接上代码

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("test" + "-thread-%d").build();

    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 100, 600, TimeUnit.SECONDS,
        new ArrayBlockingQueue<>(65536), namedThreadFactory);
    @RequestMapping("pingTest/{ip}")
    public Result testPingOpenFiles(@PathVariable("ip") String ip) { 
   
        int pingCount= 1000;
        while (pingCount-- > 0) { 
   
            threadPoolExecutor.submit(() -> { 
   
                try { 
   
                    boolean b = MyUtils.ping(ip, 1, 5000);
                    log.info(System.currentTimeMillis() + "--------" + b);
                } catch (Exception e) { 
   
                    e.printStackTrace();
                }
                try { 
   
                    Thread.sleep(1000);
                } catch (Exception e) { 
   
                }
            });
        }
        return new Result(true);
    }

三、参数说明

  1. 参数 corePoolSize

表示线程池的常驻核心线程数。如果设置为 0,则表示在没有任何任务时,销毁线程池;如果大于 0,即使没有任务时也会保证线程池的线程数量等于此值;
应该结合实际业务设置此值的大小。若 corePoolSize 的值较小,则会出现频繁创建和销毁线程情况;若值较大,则会浪费系统资源。
2. 参数 maximumPoolSize

表示线程池最大可以创建的线程数。官方规定此值必须大于 0,也必须大于等于 corePoolSize 的值;
此值只有在任务比较多,且不能存放在任务队列时,才会用到。
3. 参数 keepAliveTime

表示线程的存活时间。当线程池空闲时并且超过了此时间,多余的线程就会销毁,直到线程池中的线程数等于 corePoolSize 的值为止;
若 maximumPoolSize 的值 等于 corePoolSize 的值,则线程池在空闲的时候不会销毁任何线程。
4. 参数 unit

表示存活时间的单位,配合 keepAliveTime 参数共同使用。
5. 参数 workQueue

表示线程池执行的任务队列;
当线程池的所有线程都在处理任务时,若来了新任务则会缓存到此任务队列中,然后等待执行。
6. 参数 threadFactory

表示线程的创建工厂,一般使用默认的线程创建工厂的方法 Executors.defaultThreadFactory()来创建线程。
7. 参数 RejectedExecutionHandler

表示指定线程池的拒绝策略,属于一种限流保护的机制;
当线程池的任务已经在缓存队列 workQueue 中存满了之后,并且不能创建新的线程来执行此任务时,就会用到此拒绝策略
四种拒绝策略
(1) AbortPolicy: 丢弃任务并抛出异常。
(2) DiscardPolicy:丢弃任务但不抛出异常。
(3) DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务
(4) CallerRunsPolicy:由调用线程处理该任务
四、submit()和execute方法区别
1.submit() 方法可以配合 Future来接收线程执行的返回值,而 execute() 不能接收返回值;
2.execute() 方法属于 Executor 接口的方法,而 submit() 方法则是属于 ExecutorService 接口的方法。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187221.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • directshow摄像头录像_open camera 使用方法

    directshow摄像头录像_open camera 使用方法Win1064+VS2012工程下载:http://download.csdn.net/detail/yulinxx/9263639建一个基于Dialog的MFC程序,而局如下:一个PIC控件,用于显示摄像头捕捉画面,几个按钮创建一个C++类,类名为:CCamera在CCamera.h中,需要包含#include#include”qedit.h”

    2022年10月12日
    0
  • 六个可以永久收藏的网站

    六个可以永久收藏的网站1:Aconvertaconvert.com/cnAconvert是一个完全免费并且不限转换次数的多功能文件格式转换网站,转换效果非常出色。它的功能非常强大,支持转换的文件类型包括:PDF、文档、电子书、图像、视频、音频、压缩文件。它还支持将网页转换为PDF、JPG、PNG格式。其中PDF格式转换,不仅支持将Word、Excel、PPT、HTML、TXT、DWG、JPG、PNG、GIF和TIFF文件转换为PDF,也支持将PDF文件转换为Word、Excel

    2022年5月18日
    619
  • DNS全局负载均衡(GSLB)基本原理[通俗易懂]

    DNS全局负载均衡(GSLB)基本原理[通俗易懂]原理采用全局负载均衡(GSLB)的前提是在不同地区设立了多个数据中心,并不是所有的互联网服务都能做GSLB,前提是业务已经做了分布式部署的规划,无论用户从哪个IDC访问都能得到相同的结果,或者用户基本不会出现跨区域流动访问的情况,只会访问就近IDC,或者有一套入口调度机制,能将用户调度到所属的节点。现在很多CDN也都提供动态内容的加速,只不过这个加速只是数据传输上的优化,可以看做给你做了很多个转发…

    2022年5月5日
    80
  • android10锁屏时钟样式,三星s10息屏时钟[通俗易懂]

    android10锁屏时钟样式,三星s10息屏时钟[通俗易懂]三星s10息屏时钟设置软件相当的方便强大,是不是设置息屏时钟太麻烦了,或者横竖屏总是错乱不尽人意?不用再在网上找各种攻略啦,这款软件可以直接帮助你修改息屏时钟,一键操作设置即可!同时这款软件中还有这更多的炫酷功能,图标壁纸时钟主题等等自定义和制作功能相当的强大!喜欢的朋友们不要错过哦!赶快下载三星s10息屏时钟开始体验吧!三星s10息屏时钟介绍三星s10息屏时钟软件app是一款提取版三星s10息屏…

    2022年9月29日
    0
  • Jediscluster_唧唧pc客户端

    Jediscluster_唧唧pc客户端前言:由于spring-data-redis不支持,redis集群的操作。所以更换客户端,使用Jediscluster。正文:一.序言   前面搭建了个3个msater-slave的本地集群测试,这里用java的客户端进行一些简单测试,看看集群是否生效。   redisclient推荐:http://redis.io/clients 

    2022年10月14日
    0
  • linux vi 替换命令_vi替换命令转移

    linux vi 替换命令_vi替换命令转移原文地址:http://www.cnblogs.com/afant/archive/2009/03/11/1408745.html:s/^.*$/\L&/100#将100行内的小写转换成大写vi/vim中可以使用:s命令来替换字符串。:s/vivian/sky/替换当前行第一个vivian为sky:s/vivian/sky/g替换当前行所有vi

    2022年9月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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