线程池的使用ThreadPoolExecutor

本文介绍了线程池的概念,解释了为何使用线程池以提高效率和方便管理,并详细阐述了创建线程池的多种方式,包括Executors工具类的四种方法和通过ThreadPoolExecutor的七个参数自定义线程池。同时,文章提到了线程池的工作流程,推荐使用ThreadPoolExecutor创建线程池以避免资源耗尽风险,并给出了如何根据CPU核数和任务类型估算线程池大小的建议。最后,讨论了线程池在异步处理和并行处理等场景的应用。
摘要由CSDN通过智能技术生成

一、线程池是什么
顾名思义,好比一个存放线程的池子,我们可以联想水池。线程池意味着可以储存线程,并让池内的线程得以复用,如果池内的某一个线程执行完了,并不会直接销毁它有生命周期,可以存活一些时间,待到下一个任务来时,它会复用这个在等待中的线程,避免了再去创建线程增加的额外系统开销。

二、为什么使用线程池及它的作用
创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。这样频繁的创建线程和销毁线程,再加上业务工作线程,消耗系统资源的时间,可能导致系统资源不足。
线程池作用就是限制系统中执行线程的数量。
1)提高效率创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2)方便管理可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时有该程序创建100个线程
每当有请求的时候,就分配一个线程去工作,
如果刚好并发有101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程导致系统崩溃。

三、创建线程池的几种方式
1)通过Executors工具类提供的不同静态方法创建线程池,如下所示:
Executors.newSingleThreadExecutor()
创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIF0,LIFO,优先级)执行。

Executors.newFixedThreadPool()
创建一个固定大小的线程池,可控制线程最大并发数࿰

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
四种线程池ThreadPoolExecutor有着密切的关系。在Java中,通过Executors提供了四种线程池,这四种线程池底层都是由ThreadPoolExecutor实现的。ThreadPoolExecutor是一个灵活的线程池类,可以根据需要进行配置和定制。通过掌握ThreadPoolExecutor的参数,我们可以不局限于四种线程池,而是根据实际需求构建自己的线程池。 其中,四种线程池分别是: 1. FixedThreadPool:固定大小的线程池,线程数固定,任务被放入一个无界队列中,适用于长期执行的任务。 2. CachedThreadPool:可缓存的线程池,线程数根据需求自动增加和减少,适用于执行大量短期任务的场景。 3. SingleThreadPool:单线程的线程池,只有一个线程在工作,适用于需要保证顺序执行的任务。 4. ScheduledThreadPool:定时任务的线程池,可以设置任务的定时执行时间。 ThreadPoolExecutor提供了更加灵活的线程池管理,可以通过设置不同的参数来控制线程池的行为。例如,可以选择不同的队列策略,如无界队列LinkedBlockingQueue,来控制线程池中任务的排队方式。通过学习和使用ThreadPoolExecutor,我们可以更好地理解和使用四种线程池,同时也可以根据实际需求进行自定义的线程池构建。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JAVA线程池ThreadPoolExecutor实现的四种线程池](https://blog.csdn.net/a78270528/article/details/79881850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Java ExecutorService四种线程池ThreadPoolExecutor机制](https://blog.csdn.net/Zzz_Zzz_Z/article/details/81218574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值