java面试:为什么用线程池?说一下线程池有哪些参数,都有什么作用

本文详细介绍了Java线程池的作用、核心参数,包括corePoolSize、maximumPoolSize、keepAliveTime等,并解析了线程池处理流程和阻塞队列的作用。当核心线程数满时,为何先添加到队列而非创建新线程,这主要是为了减少线程创建的开销,提高效率。线程池通过合理配置和管理线程,能有效提升系统性能和响应速度。

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

一、线程池作用

  1. 降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。
  2. 提高响应速度;任务来了,直接有线程可用可执行,而不需要先创建线程,在执行。
  3. 提高线程的可管理性;线程是稀缺资源,使用线程池可以统一分配调优监控。

二、线程池核心参数

  1. corePoolSize :代表核心线程数,也就是正常情况下创建的工作线程数,这些线程创建后并不会销毁,而是会常驻;
  2. maxinumPoolSize:代表的是最大线程数,它与核心线程数相对应,表示最大允许创建的线程数,比如任务较多,将核心线程数都用完了,仍然无法满足需求时,此时就会继续创建新的线程,但是线程池内线程总数不会超过最大线程数;
  3. keepAliveTime:表示超出核心线程数之外的线程的空闲时间,也就是说核心线程不会消除,但是超出核心线程数的部分线程如果空闲一定时间则会销毁,我们可以通过设置keepAliveTime来控制空闲时间;
  4. unit:表示空闲时间的单位
  5. workQueue:用来存放待执行的任务,假设我们现自核心线程都被使用了,还有任务进来则全部放入等待队列中,直到等待队列放满任务还再继续加入新任务则会创建新的新的线程;
  6. ThreadFactory:实际上是一个线程工厂,用来生产线程执行任务。我们可以选择使用默认的创建工厂,生产的线程在同一个组内,拥有相同的优先级,且都不是守护线程。当然我
Java中创建自定义线程池通常涉及到`ExecutorService`框架,它提供了一种更高级的方式来管理并发任务。这里我们介绍如何使用`ThreadPoolExecutor`,这是一个功能强大的线程池类,允许自定义线程数、队列策略以及拒绝策略。 以下是创建自定义线程池的基本步骤: 1. **导入所需的包**: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; ``` 2. **创建固定大小线程池** (例如5个线程) : ```java ExecutorService executor = Executors.newFixedThreadPool(5); ``` 3. **创建可缓存线程池** (线程数根据需要动态调整) : ```java ExecutorService executor = Executors.newCachedThreadPool(); ``` 4. **设置定长工作队列和最大线程数**: ```java int corePoolSize = 10; // 核心线程数 int maximumPoolSize = 20; // 最大线程数 ExecutorService executor = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, // 空闲线程存活时间 60L, // 阻塞等待超时时间 TimeUnit.SECONDS, new ArrayBlockingQueue<>(maximumPoolSize)); // 定义队列容量 ``` 5. **提交任务**: ```java executor.submit(Runnable task); // Runnable接口的任务 executor.executeCallable(Callable task); // Callable接口的任务,返回值可以获取 ``` 6. **关闭线程池**: ```java executor.shutdown(); // 可以继续接收任务,但不会新分配线程 executor.shutdownNow(); // 立即停止接受新的任务,并尝试让当前的任务尽快完成 try { if (!executor.awaitTermination(1, TimeUnit.MINUTES)) { System.err.println("Pool did not terminate"); } } catch (InterruptedException e) { executor.shutdownNow(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值