






本文将通过源码分析,详细探讨它们各自的内存占用情况,帮助你在实际项目中做出更优选择。
execute
VS
submit

execute 与 submit 的基本区别


execute 方法



用途:
适用场景:






submit 方法



用途:
适用场景:






内存占用分析


使用 execute 提交任务
假设我们向线程池提交了20万个空任务,代码如下:
public static void main(String[] args) {ThreadPoolExecutor threadPoolExecutor =new ThreadPoolExecutor(8, 8, 15, TimeUnit.MINUTES, new LinkedBlockingQueue<>(), new ThreadPoolExecutor.CallerRunsPolicy());for (int i = 0; i < 200000; i++) {threadPoolExecutor.execute(() -> {LockSupport.park();});}LockSupport.park();}



内存计算









使用 submit 提交任务
同样提交20万个空任务,代码如下:
public static void main(String[] args) {ThreadPoolExecutor threadPoolExecutor =new ThreadPoolExecutor(8, 8, 15, TimeUnit.MINUTES, new LinkedBlockingQueue<>(), new ThreadPoolExecutor.CallerRunsPolicy());for (int i = 0; i < 200000; i++) {threadPoolExecutor.submit(() -> {LockSupport.park();});}LockSupport.park();}



内存计算









优化建议




1. 选择合适的方法:
2. 选择合适的队列:
3. 减少对象创建:


实际案例分析






结论




在高并发和大量任务的应用场景中,选择合适的任务提交方式和阻塞队列对于优化内存使用至关重要。
execute 方法由于不需要额外的包装对象,内存占用较低,适合大规模任务提交。
而 submit 方法虽然提供了获取任务结果的能力,但会带来更高的内存开销。
根据具体需求选择合适的方法和数据结构,可以有效提升系统性能和资源利用率。








👋 大家好,我是枫哥,一名Java后端开发者!我热衷于探索新技术,并在我的微信公众号上分享关于Java 生态和后端开发的知识。欢迎关注我的公众号,期待与你一起探讨技术的无穷可能!”
目前专注于Java技术分享,覆盖春招、秋招、社招和跳槽相关内容,并提供一对一带徒学习服务。加入 学徒计划,即可享受内推机会和优质资源,签订协议确保就业无忧。
此外,我们还推出了‘Java跳槽网’, 为你的求职之路提供全方位支持,助你快速找到理想工作




原文作者:IT枫斗者;如有侵权,请联系管理员删除。