Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >线程池的使用

线程池的使用

原创
作者头像
时光_赌徒
修改于 2021-09-28 10:20:31
修改于 2021-09-28 10:20:31
75100
代码可运行
举报
文章被收录于专栏:记录记录
运行总次数:0
代码可运行

//记录一下为什么阿里禁止使用一下方式创建线程池

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

ExecutorService executorService = Executors.newCachedThreadPool();

   public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
     Integer.MAX_VALUE 容易OOM

//获取电脑线程数Runtime.getRuntime().availableProcessors()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 如果是CPU密集型,CPU用的高,maximumPoolSize = CPU核数+1
 *
 */
//获取电脑线程数
System.out.println(Runtime.getRuntime().availableProcessors());
ExecutorService executorService = new ThreadPoolExecutor(
        2,//核心线程数
        5,//最大线程数
        2L,//等待时间
        TimeUnit.SECONDS,,//等待时间的单位
        new LinkedBlockingQueue<>(3),//等待的阻塞消息队列
        Executors.defaultThreadFactory(),//使用默认工厂创建
        /**
         * 拒绝策略
         * .AbortPolicy()默认的 ,拒绝执行策略
         * CallerRunsPolicy(),该策略不会抛弃任务,也不会爆出异常,将任务会退给调用者
         * DiscardPolicy(),多余丢失不报错
         * DiscardOldestPolicy 丢掉最老的
         */
       // new ThreadPoolExecutor.AbortPolicy());
       // new ThreadPoolExecutor.CallerRunsPolicy());
      //  new ThreadPoolExecutor.DiscardPolicy());
        new ThreadPoolExecutor.DiscardOldestPolicy());//拒绝策略

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JUC系列(六) 线程池
IO 密集型 判断程序中 十分消耗IO资源的线程,如: 程序 有 15个大型任务,io 十分占中资源,那么设定的比任务数量大 就可以保证一定性能、
冷环渊
2022/12/03
2620
JUC系列(六) 线程池
java并发线程池---了解ThreadPoolExecutor就够了
总结:线程池的特点是,在线程的数量=corePoolSize后,仅任务队列满了之后,才会从任务队列中取出一个任务,然后构造一个新的线程,循环往复直到线程数量达到maximumPoolSize执行拒绝策略。
intsmaze-刘洋
2018/08/29
2.8K0
Java 线程池四种拒绝策略
最大线程数 + 阻塞队列 = 3,执行到4,5的时候就抛出错误。这里需要用 try catch 捕获异常。任务1、2、3正常执行。
用户10384376
2023/02/26
4690
Java 线程池四种拒绝策略
一文简单理解Java线程池的问题
线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核充分利用,还能防止过分调度。 线程池架构
暴躁的程序猿
2022/03/24
1790
一文简单理解Java线程池的问题
线程池基础
创建、销毁这种动作十分浪费资源,因此可以事先准备好一部分资源,谁要用就来直接取,取完了还回来,这就是池化技术。
shimeath
2020/07/30
3200
线程池基础
线程池 坑中之王 !
今天跟大家一起聊聊线程池中容易踩的 10 个坑,以及如何避免这些坑,希望对你会有所帮助。
苏三说技术
2024/12/19
1620
线程池 坑中之王 !
并发设计模式实战系列(4):线程池
今天为大家带来的是并发设计模式实战系列,第四章线程池(Thread Pool)​,废话不多说直接开始~
摘星.
2025/05/20
1760
《Java-SE-第二十六章》之线程池
  线程虽然是轻量级进程,尽管线程比进程创建和销毁所消耗 的资源要少。但是如果线程的创建和销毁频率高了,开销也还是有的,为了进一步提高效率,引入了线程池,池子里面放着事先创建好的线程.后面用的时候直接从池子里面拿,如此速度就快了,但是代价线程池所需的空间,线程池就是以空间换时间。
用户10517932
2023/10/07
2030
《Java-SE-第二十六章》之线程池
四种线程池拒绝策略
线程池,相信很多人都有用过,没用过相信的也有学习过。但是,线程池的拒绝策略,相信知道的人会少许多。
用户6182664
2020/05/09
1.4K0
四种线程池拒绝策略
Juc并发编程12——2万字深入源码:线程池这篇真的讲解的透透的了
本文将介绍常见的线程池的使用方法,介绍线程池的参数、拒绝策略、返回参数获取以及定时调度。
半旧518
2022/10/26
1860
Juc并发编程12——2万字深入源码:线程池这篇真的讲解的透透的了
【JUC】006-线程池
程序的运行需要占用系统资源,为了减少系统消耗、提升系统性能并方便管理,就有了池化技术;
訾博ZiBo
2025/01/06
1020
【JUC】006-线程池
使用 Executors,ThreadPoolExecutor,创建线程池,源码分析理解
之前创建线程的时候都是用的 newCachedThreadPoo,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 这四个方法。 当然 Executors 也是用不同的参数去 new ThreadPoolExecutor 实现的,本文先分析前四种线程创建方式,后在分析 new ThreadPoolExecutor 创建方式 使用 Executors 创建线程池 1.newFixedThreadPool() 由于使用了Link
程序员鹏磊
2018/02/09
7370
Java线程池详解
构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?Runnable和Callable的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。
用户4283147
2022/10/27
4460
Java线程池详解
Java并发编程之线程池
Java中线程池是通过Executor框架实现的,该框架中用到了Executor,Executors(代表工具类),ExecutorService,ThreadPoolExecutor这几个类
Java微观世界
2025/01/21
1400
Java并发编程之线程池
使用ExecutorService实现线程池
  当一个程序中创建了许多线程,并在任务结束后销毁,会给系统带来过度消耗资源,以及过度切换线程的危险,从而可能导致系统崩溃。为此我们应使用线程池来解决这个问题。
HUC思梦
2020/09/03
7360
使用ExecutorService实现线程池
Java杂谈之线程池
受限于硬件、内存和性能,我们不可能无限制的创建任意数量的线程,因为每一台机器允许的最大线程是一个有界值。线程池就是用这些有限个数的线程,去执行提交的任务。然而对于多用户、高并发的应用来说,提交的任务数量非常巨大,一定会比允许的最大线程数多很多。为了解决这个问题,必须要引入排队机制,或者是在内存中,或者是在硬盘等容量很大的存储介质中。Java提供的ThreadPoolExecutor只支持任务在内存中排队,通过BlockingQueue暂存还没有来得及执行的任务。
你呀不牛
2021/05/28
4200
并发编程之线程池
一、关于ThreadPoolExecutor 为了更好地控制多线程,JDK提供了一套Executor框架,帮助开发人员有效的进行线程控制,其本质就是一个线程池。其中ThreadPoolExecutor是线程池中最核心的一个类,后面提到的四种线程池都是基于ThreadPoolExecutor实现的。 ThreadPoolExecutor提供了四个构造方法,我们看下最重要的一个构造函数: public class ThreadPoolExecutor extends AbstractExecutorServic
lyb-geek
2018/03/27
9860
并发编程之线程池
线程池整理
一般在生产环境中,我们都不会直接new一个Thread,然后再去start(),因为这么做会不断频繁的创建线程,销毁线程,过大的线程会耗尽CPU和内存资源,大量的垃圾回收,也会给GC带来压力,延长GC停顿时间.
算法之名
2019/08/20
6250
聊聊并发(五)——线程池
在使用线程时,需要new一个,用完了又要销毁,这样频繁的创建和销毁很耗资源,所以就提供了线程池。道理和连接池差不多,连接池是为了避免频繁的创建和释放连接,所以在连 接池中就有一定数量的连接,要用时从连接池拿出,用完归还给连接池,线程池也一样。   线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多 个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。
用户4268038
2021/11/18
2880
java-线程池(ThreadPoolExecutor)的参数解析
很多时候为了省事用的都是Executors的方式去创建,感觉也没什么问题,不过阿里工程师的推荐自然是有道理的,以后还是尽量改用ThreadPoolExecutor的方式来创建吧,不过使用ThreadPoolExecutor方式来创建时,需要传入的参数很多,为了加深记忆,这里就简记录一下。
李林LiLin
2020/11/05
1.4K0
相关推荐
JUC系列(六) 线程池
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档