使用线程池

本文深入探讨了Java线程池的构造方法,包括核心线程数、最大线程数、空闲时间等参数,以及不同类型的线程池如Cached、Fixed和Single。线程池能有效减少线程创建销毁的开销,提高系统响应速度,并便于管理线程。然而,不恰当的使用可能导致内存溢出或性能问题。因此,理解线程池的工作原理和选择合适的配置至关重要。
摘要由CSDN通过智能技术生成

线程池的构造方法:

public ThreadPollExecutor(int corePoolSize//核心线程数量

                                              int maximumPoolSize//最大线程数量

                                              long keepAliveTime//最大空闲时间

                                                TimeUnit unit//时间单位

                                                BlockingQueue<Runnable> workQueue//任务队列

                                                ThreadFactory threadFactory//线程工厂

                                                RejectedExecutionHandler handler//饱和处理机制)

scheduled :安排;为…安排时间;预定;

 newCachedThreadPool:没有核心线程,队列为同步队列:只有一个队列,如果没用使用此队列,不会产生新的队列,有几个Task,就有几个线程,线程数量过多,只会导致内存占用100%,不会导致内存溢出 

newFixedThreadPool:最大线程数量与核心线程数量相同:队列为无界队列

newsigleThreadPool:最大线程数量等于核心线程数量等于1:队列为无界队列

为什么要使用线程池

、减少开销提升效率
        减少线程的创建和销毁所花的时间以及系统资源的开销;

        同时,提高系统响应速度,当有新任务到达时,通过复用已存在的线程,无需等待新线程的创建便可立即执行。

2、提高线程的可管理性
        方便管控线程并发数量。线程无限制的创建,可能会导致内存占用过多,从而产生OOM,并且会造成CPU过度切换,CPU切换线程是有时间成本的:需要保持当前执行线程的现场,并恢复要执行线程的现场。

        对线程进行统一的分配、调优和监控,从而也提高响应速度;提供更强大的功能,延时定时线程池。
 

为什么不推荐使用java自带的线程池工具类?

OOM(内存溢出):只有newCachedThreadPool 不会出现OOM:问题出现在了队列上,队列的本质是数据结构,数据结构的本质是用来存储的  

提交优先级:核心线程---队列--非核心线程

执行优先级:核心线程--非核心线程---队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值