在Java中ExecutorService接口如何使用_Java线程池高级用法说明-java教程

应手动构造threadpoolexecutor而非executors快捷方法,因其可控制核心线程数、最大线程数、有界队列及拒绝策略;submit()返回future便于异常感知,execute()更轻量但异常不传播;shutdown()等待任务完成,shutdownnow()尝试中断并清空队列;必须显式shutdown,gc不会自动调用。

ExecutorService 不是拿来直接 new 的,它必须通过 Executors 工厂类或 ForkJoinPool 等具体实现类获得;盲目用 Executors.newFixedThreadPool() 在高并发场景下容易 OOM,这是最常踩的坑。

怎么选合适的线程池创建方式

Java 8+ 推荐优先使用 ThreadPoolExecutor 手动构造,而不是 Executors 的快捷方法。因为后者隐藏了关键参数,比如:

  • newFixedThreadPool(n) 底层用的是无界 LinkedBlockingQueue,任务持续提交会无限堆积,吃光堆内存
  • newCachedThreadPool() 允许创建无限线程(60 秒空闲后回收),突发流量下可能创建成千上万个线程,触发 OutOfMemoryError: unable to create native thread
  • newSingleThreadExecutor() 同样用无界队列,且单点故障风险高

正确做法是明确指定核心线程数、最大线程数、队列容量和拒绝策略:

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    2,           // corePoolSize
    4,           // maxPoolSize
    60L,         // keepAliveTime
    TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(100), // 有界队列
    new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝时由调用线程执行
);

submit() 和 execute() 到底该用哪个

区别不在“能不能扔任务”,而在于返回值和异常处理机制:

立即学习“Java免费学习笔记(深入)”;

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java中ExecutorService接口如何使用_Java线程池高级用法说明-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3995530+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3995531+
  • 本周更新: 0+
  • 最后更新: 2026-03-16