ExecutorService 本身是一个接口,核心参数并不在它身上,而是体现在它的主要实现类中,尤其是 ThreadPoolExecutor。下面我按「面试/实战」角度,分层次给你讲清楚。
ExecutorService executor = new ThreadPoolExecutor(...);
✅ 真正有核心参数的是 ThreadPoolExecutor
int corePoolSize
✅ 任务提交时优先创建核心线程
int maximumPoolSize
long keepAliveTime
allowCoreThreadTimeOut(true),核心线程也会回收TimeUnit unit
keepAliveTime 的时间单位TimeUnit.SECONDSBlockingQueue<Runnable> workQueue
用于存放 等待执行的任务
常见队列类型:
| 队列 | 特点 | 使用场景 |
|---|---|---|
LinkedBlockingQueue |
无界(默认 Integer.MAX_VALUE) | 任务多、允许堆积 |
ArrayBlockingQueue |
有界 | 控制资源 |
SynchronousQueue |
不存任务,直接交付 | 线程数多、响应快 |
PriorityBlockingQueue |
优先级队列 | 任务有优先级 |
⚠️ 队列类型直接影响线程池行为
ThreadFactory threadFactory
new ThreadFactory() {
public Thread newThread(Runnable r) {
return new Thread(r, "my-thread-" + count++);
}
}
RejectedExecutionHandler handler
当:
触发拒绝策略
| 策略 | 说明 |
|---|---|
AbortPolicy(默认) |
抛 RejectedExecutionException |
CallerRunsPolicy |
调用者线程执行 |
DiscardPolicy |
直接丢弃 |
DiscardOldestPolicy |
丢弃队列最老任务 |
提交任务
↓
核心线程是否已满?
↓ 否 → 创建核心线程
↓ 是
队列是否已满?
↓ 否 → 放入队列
↓ 是
线程数是否达到最大?
↓ 否 → 创建非核心线程
↓ 是
执行拒绝策略
Executors.newFixedThreadPool()
Executors.newCachedThreadPool()
❌ 不推荐原因
✅ 推荐:手动 new ThreadPoolExecutor
corePoolSize ≈ CPU 核心数
queue: 有界队列
corePoolSize ≈ CPU 核心数 * 2
queue: 适当大
ExecutorService 的核心参数是指 ThreadPoolExecutor 的 7 个参数:
corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、RejectedExecutionHandler,
它们共同决定了线程池的线程创建、任务排队和拒绝策略。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。