ExecutorService是Java并发编程核心工具,用于管理线程池和异步任务执行。1. 通过Executors工厂类创建不同线程池:newFixedThreadPool创建固定大小线程池,newCachedThreadPool创建可缓存线程池,newSingleThreadExecutor创建单线程池,newScheduledThreadPool支持定时或周期性任务。示例:ExecutorService executor = Executors.newFixedThreadPool(4);2. 提交任务有三种方式:submit(Runnable task)提交无返回值任务,返回Future对象;submit(Runnable task, T result)提交任务并返回指定类型Future,result作为返回值容器;submit(Callable task)提交有返回值任务,call()方法返回结果或抛出异常。3. 控制任务执行与关闭线程池:shutdown()启动有序关闭,不再接受新任务但已提交任务继续执行;shutdownNow()尝试停止所有正在执行任务,返回未执行任务列表;awaitTermination(long timeout, TimeUnit unit)配合shutdown使用,等待所有任务完成。4. 实际应用场景示例:并发处理多个用户请求并汇总结果。掌握submit用法、区分Runnable与Callable、正确关闭线程池是关键。实际开发中建议结合try-finally或try-with-resources确保线程池释放。

在Java中,ExecutorService 是并发编程的核心工具之一,它属于 java.util.concurrent 包,用于管理线程池和异步任务执行。通过它,开发者无需手动创建和管理线程,而是将任务提交给线程池,由其自动调度执行。
1. 创建ExecutorService实例
使用 Executors 工厂类可以快速创建不同类型的线程池:
newFixedThreadPool(n):创建固定大小的线程池 newCachedThreadPool():创建可缓存的线程池,按需创建线程 newSingleThreadExecutor():单线程池,保证任务顺序执行 newScheduledThreadPool(n):支持定时或周期性任务执行
示例:
ExecutorService executor = Executors.newFixedThreadPool(4);
2. 提交任务的三种方式
ExecutorService 支持提交 Runnable 和 Callable 类型的任务,主要方法有以下几种:
立即学习“Java免费学习笔记(深入)”;
submit(Runnable task)
提交无返回值的任务,返回一个 Future> 对象,可用于判断任务是否完成。
Future future = executor.submit(() -> { System.out.println("执行无返回值任务");});// future.get() 可阻塞等待完成
submit(Runnable task, T result)
提交任务并返回指定类型的 Future,result 作为返回值容器(适用于需要获取结果的场景)。
StringBuilder result = new StringBuilder();Future future = executor.submit(() -> { result.append("任务完成");}, result);StringBuilder res = future.get(); // 获取结果
submit(Callable task)
提交有返回值的任务,Callable 的 call() 方法可返回结果或抛出异常。
AI Humanize
使用AI改写工具,生成不可被AI检测的文本内容
154 查看详情
Future future = executor.submit(() -> { return 100 + 200;});Integer sum = future.get(); // 获取计算结果System.out.println("结果:" + sum);
3. 控制任务执行与关闭线程池
提交任务后,合理管理线程池生命周期至关重要,避免资源泄漏。
shutdown()
启动有序关闭,不再接受新任务,已提交任务会继续执行。
executor.shutdown();
shutdownNow()
尝试停止所有正在执行的任务,返回未执行的任务列表。
List remainingTasks = executor.shutdownNow();
awaitTermination(long timeout, TimeUnit unit)
配合 shutdown 使用,等待所有任务完成。
executor.shutdown();if (!executor.awaitTermination(5, TimeUnit.SECONDS)) { executor.shutdownNow(); // 超时后强制关闭}
4. 实际应用场景示例
假设需要并发处理多个用户请求并汇总结果:
ExecutorService executor = Executors.newFixedThreadPool(3);List<Future> futures = new ArrayList();String[] users = {"A", "B", "C"};for (String user : users) { Callable task = () -> "处理用户: " + user; futures.add(executor.submit(task));}for (Future f : futures) { try { System.out.println(f.get()); // 输出每个任务结果 } catch (Exception e) { e.printStackTrace(); }}executor.shutdown();
基本上就这些。掌握 submit 的用法、区分 Runnable 与 Callable、正确关闭线程池,是使用 ExecutorService 的关键。实际开发中建议结合 try-finally 或 try-with-resources 确保线程池被释放。
以上就是Java里如何使用ExecutorService提交并发任务_ExecutorService操作方法解析的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/967211.html
微信扫一扫
支付宝扫一扫