Java 并发面试题, 如何设置 Java 线程池的线程数?
Java 并发面试题, 如何设置 Java 线程池的线程数?
QA
Step 1
Q:: Java 并发面试题:
如何设置 Java 线程池的线程数?
A:: 设置 Java 线程池的线程数通常需要考虑以下几个因素:CPU 核心数、任务的类型和执行时间、系统资源。可以使用 Executors.newFixedThreadPool(nThreads) 方法来创建一个固定大小的线程池,其中 nThreads 表示线程数。或者使用 ThreadPoolExecutor 构造函数来创建更灵活的线程池。合理的线程数通常是 CPU 核心数的 1-2 倍,如果任务 I/
O 密集,可以设置更多的线程数。
Step 2
Q:: Java 并发面试题:
什么是线程池?
A:: 线程池是一种多线程处理形式,可以将多个任务分配给有限数量的线程来处理,避免了频繁创建和销毁线程的开销,提高了系统性能和资源利用率。
Step 3
Q:: Java 并发面试题:
线程池有哪些类型?
A:: Java 中常用的线程池有四种:FixedThreadPool(固定大小线程池)、CachedThreadPool(缓存线程池)、SingleThreadExecutor(单线程池)和 ScheduledThreadPool(定时任务线程池)。
Step 4
Q:: Java 并发面试题:
线程池的核心参数有哪些?
A:: 线程池的核心参数包括:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(空闲线程存活时间)、unit(时间单位)、workQueue(任务队列)、threadFactory(线程工厂)、handler(拒绝策略)。
Step 5
Q:: Java 并发面试题:
线程池如何处理任务拒绝?
A:: 当线程池中的任务数超过了最大线程数并且任务队列已满时,会触发拒绝策略。常见的拒绝策略有:AbortPolicy(抛出异常)、CallerRunsPolicy(由调用者执行任务)、DiscardPolicy(丢弃任务)、DiscardOldestPolicy(丢弃最旧的任务)。