在 Java 中,ExecutorService 的任务队列指的是:
当把任务提交给线程池后,如果线程不够用,任务会被放进一个“等待队列”,这个队列就是任务队列(work queue)。
下面从 原理 → 常见队列类型 → 示例 → 注意事项 系统说明。
以 ThreadPoolExecutor 为例(最常用实现):
ExecutorService executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue
);
✅ 任务队列在整个流程中处于第 2 / 3 步
LinkedBlockingQueue(最常用)new LinkedBlockingQueue<>()
⚠️ 风险:可能 OOM
ArrayBlockingQueue(有界队列)new ArrayBlockingQueue<>(100)
✅ 推荐生产环境使用
SynchronousQueue(直接交付)new SynchronousQueue<>()
PriorityBlockingQueue(优先级队列)new PriorityBlockingQueue<>()
ComparableExecutorService executor = new ThreadPoolExecutor(
2,
4,
60,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10),
new ThreadPoolExecutor.AbortPolicy()
);
ExecutorService executor = Executors.newFixedThreadPool(10);
等价于:
new ThreadPoolExecutor(
10, 10, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>()
);
⚠️ 队列无界,可能堆积大量任务
ThreadPoolExecutor tpe = (ThreadPoolExecutor) executor;
BlockingQueue<Runnable> queue = tpe.getQueue();
System.out.println("队列中等待的任务数:" + queue.size());
⚠️ 只能查看数量,不能直接操作任务
❌ 不一定
→ 可能进入队列等待
→ 触发:
✅ 做法:
maximumPoolSizeExecutorService 的任务队列是线程池用于缓存等待执行任务的地方,队列类型直接决定了线程池的行为和稳定性。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。