面试常问:如何设置Java线程池大小?

本文介绍了Java线程池的概念、种类及其特点,包括newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor和newScheduledThreadPool。讨论了如何根据CPU密集型和IO密集型任务设置线程池大小的策略,并提供了设置线程池最大线程数的公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

✨什么是线程池?

线程池: 是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时尽可能重用这些线程而不是新建一个线程。

🌈线程池种类介绍

🌈线程池种类介绍——Executors


🌝newFixedThreadPool()

newFixedThreadPool():固定线程数的线程池

 public static ExecutorService newFixedThreadPool(int nThreads) {
   
   
     return new ThreadPoolExecutor(nThreads, nThreads,
                                   0L, TimeUnit.MILLISECONDS,
                                   new LinkedBlockingQueue<Runnable>());
 }

线程池特点:
  • 核心线程数和最大线程数大小一样
  • 没有所谓的非空闲时间,即keepAliveTime为0
  • 阻塞队列为无界队列LinkedBlockingQueue
缺点
  • 如果某任务执行时间过长,而导致大量任务堆积在阻塞队列中,或者说在某一时刻大量任务进来则会导致机器内存使用不断飙升,最终导致OOM
使用场景

newFixedThreadPool 适用于处理CPU密集型的任务,确保CPU在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。


🌑newCachedThreadPool()
 public static ExecutorService newCachedThreadPool() {
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值