知识改变命运! java高频面试题-线程池中execute跟submit的区别?_猿份哥-lskyf博客社区

java高频面试题-线程池中execute跟submit的区别?

猿份哥 6月前 ⋅ 596 阅读 ⋅ 3 个赞

``当谈论线程池时,其中的execute和submit是两种常用的方法,它们在任务提交和执行上有所不同。

线程池中 execute 与 submit 方法的区别

1.execute 方法

execute 是 ThreadPoolExecutor 类中的方法,用于向线程池提交一个 Runnable 任务。Runnable 是一个表示可运行任务的接口,但它不返回任何结果。execute 方法适用于不需要获取任务执行结果的情况。

示例代码如下:

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new Runnable() {
    public void run() {
        // 执行任务逻辑
    }
});

executor.shutdown(); // 关闭线程池

2. submit 方法

submit 也是 ThreadPoolExecutor 类中的方法,用于向线程池提交一个任务,但它可以处理 Runnable 和 Callable 两种任务类型。与 execute 不同的是,submit 方法可以获取任务执行的返回结果,因为它返回一个 Future 对象,通过该对象可以获取任务的执行状态和结果。

示例代码如下:

ExecutorService executor = Executors.newFixedThreadPool(5);
Future<String> future = executor.submit(new Callable<String>() {
    public String call() {
        // 执行任务逻辑并返回结果
        return "Task completed";
    }
});

// 获取任务执行结果

try {
    String result = future.get();
    // 处理任务结果
} catch (InterruptedException | ExecutionException e) {
    // 异常处理
}

executor.shutdown(); // 关闭线程池

区别总结

任务类型和返回结果:

execute 只能提交 Runnable 类型的任务,无法获取返回结果。 submit 可以提交 Runnable 或 Callable 类型的任务,方法返回一个 Future 对象,可用于获取任务执行状态和结果。

异常处理:

execute 方法无法直接处理任务执行过程中的异常。 submit 方法可以通过 Future 对象捕获任务执行过程中的异常。

在选择使用 execute 还是 submit 时,需要根据具体的需求来决定。若只是简单地提交任务而不需要获取返回结果或处理异常,execute 可能更为简洁;而需要获取任务结果或对异常进行处理时,应选择 submit 方法。

希望这份解释对您有所帮助,如果有任何问题或者需要进一步了解,欢迎提问。


全部评论: 0

    我有话说:

    java高频面试-SpringBean生命周期

    SpringBean生命周期有如下过程: 1.Bean容器找到配置文件Spring Bean定义。 2.Bean容器利用Java Reflection API创建一个Bean实例。 3

    java高频面试-mysqlInnoDB与MyISAM存储引擎有哪些区别

    mysqlInnoDB与MyISAM存储引擎有哪些区别 ? MySQL是一个广泛使用关系型数据库管理系统,其中InnoDB和MyISAM是两种常用存储引擎。它们在功能和性能方面存在着显著差异

    java高频面试-java类加载需要经历哪些过程?

    本篇文章是基于JDK 8及以上版本Java类加载过程。 Java类加载过程 Java类加载是Java虚拟机(JVM)执行过程关键步骤。它涉及Java动态加载、链接和初始化。在本文,我们将

    java高频面试-Spring Boot自动配置是如何工作,以及它优点是什么?

    Spring Boot自动配置是其设计理念核心之一,它通过约定大于配置思想,为开发者提供了一种零配置开发体验。以下是对这个问题详细解答: 自动配置原理: Spring Boot通过

    java高频面试-在Spring,当一个Bean依赖另一个Bean时,如果这两个Bean之间出现了循环依赖,Spring会如何处理呢?

    Spring 循环依赖处理 循环依赖是指两个或多个Bean之间相互依赖,形成了相互引用关系。在Spring框架,如果遇到循环依赖,即两个Bean互相持有对方引用,Spring框架如何处理呢

    我向20k+以上java高级开发工程师提了那些面试问题

    公司需要一位java高级开发工程师,找到我去面试。我回忆了一下,记录部分我提问,如果大家刚兴趣可以给我留言,我视情况看是否继续补充,或者是否提供答案。 1.聊聊您对spring Boot一些见解

    java高频面试-Java如何实现序列化和反序列化?

    一.为什么要序列化? 序列化为数据持久化、远程通信、数据交换和对象复制提供了便捷解决方案。它是在不同系统间共享和传递对象一种常用方法。 几个常见原因: 持久化数据: 将对象序列化后存储在文件系统

    spring boot面试及答案持续更新

    2019-07-28最新整理spring boot面试及答案 1.Spring Boot是什么 这是摘自官方一段话 Spring Boot is designed to get you up

    Java 平台标准版文档

    您在台式机和服务器上开发和部署 Java 应用...

    面试:MySQL参数innodb_flush_log_at_trx_commit有什么作用?

    面试:MySQL参数innodb_flush_log_at_trx_commit有什么作用? innodb_flush_log_at_trx_commit是MySQLInnoDB存储引擎一个

    java程序员必须知道网站

    sping官网 spring各种框架给java开发带来便利至今无法撼动 github 有各种语言项目都有托管在上面,各种demo使用起来省心省力 stackoverflow 各种程序所遇到

    Java如何返回多个值

      我有一个方法,需要返回多个对象。可是Java只能返回一个值,请问如何才能返回多个值呢?

    减肥---我与瘦子区别

    减肥---我与瘦子区别 最美艳遇是遇见更好、更优秀自己。 为什么别人总是能能控制好自己身材?瘦子和我区别在哪里呢? 关于吃: 瘦子会告诉你,他们也吃很多,而且今天还吃撑了,也喝奶茶,也吃

    ...jar没有主清单属性, spring boot或者spring cloudmaven项目 java -jar test.jar 方式启动报错:...jar没有主清单属性

    1.spring boot或者spring cloudmaven项目老是遇到问题...jar没有主清单属性 2.解决方法:在pom.xml添加如下代码 <build> <

    opencv在idea简单示例

    这篇文章简述是opencv在idea简单示例 安装opencv 首先,需要在系统上安装opencv。可以在opencv官方网站上找到安装指南。 项目添加libary 在安装完opencv后

    加入公众号
    加入公众号