本篇文章给大家谈谈执行和提交的区别,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
commit 可以提交Runnable 和Callable 类型的任务。异常的:
任务执行过程中execute会直接抛出异常,可以使用try和catch捕获异常。提交将以与普通线程完全相同的方式处理异常。任务执行过程中出现的异常可以通过Future的get方法重新抛出。返回值:
execute()没有返回值
Submit有返回值,所以需要返回值的时候必须使用submit。
2、对execute和submit 的API理解
首先我们看一下Java API中这两个方法的说明。
execute() 是在Executor 接口中定义的。 ThreadPoolExecutor继承了AbstractExecutorService抽象类,该抽象类实现了ExecutorService接口(但不重写execute方法),ExecutorService接口又继承了Executor接口。总体感觉:表示ThreadPoolExecutor实现了execute()方法。那么我们看一下api文档是如何定义execute()方法的:
执行public voidexecute(Runnable command) 在将来的某个时间执行给定的任务。该任务可以在新线程或现有池线程中执行。如果任务无法提交执行,无论是因为该执行器已关闭还是因为其容量已达到,该任务将由当前的RejectedExecutionHandler 处理。参数: command - 要执行的任务。抛出: RejectedExecutionException - 如果无法接收到要执行的任务,RejectedExecutionHandler 决定是否抛出RejectedExecutionException。 NullPointerException - 如果命令为null。提交方法定义在ExecutorService接口中,具体实现由AbstractExecutorService执行。提交方法被重载了三次,使用了三个不同的参数。 API 的摘录如下:
(1)提交公开Future? commit(Runnable task) 提交一个Runnable 任务来执行,并返回一个代表该任务的Future。当成功完成时,Future 的get 方法将返回null。说明符:接口ExecutorService中的提交参数:task - 待提交的任务返回:一个Future,表示该任务正在等待完成------------------------ ---------- ---------------------------------------- ---------- ---------- (2)submit public Future Submit(Runnable task,T result) 提交一个Runnable 任务来执行,并返回一个代表该任务的Future。当成功完成时,Future 的get 方法将返回给定的结果。说明符:接口ExecutorService中的提交参数:task - 待提交的任务结果- 返回结果返回:Future表示任务正在等待完成-------------------- ---- ---------------------------------------------------------- ---- ------------------(3)submit public Future Submit(Callable task) 提交一个返回值的任务执行,返回一个表示待处理的Future任务的结果。 Future 的get 方法将在成功完成后返回任务的结果。如果想立即阻塞任务的等待,可以使用result=execute.submit(aCallable).get();形式的结构体。 -------------------------------------------------- ---------------------------------------注意:Executors类包含一组方法,可以转换一些其他常见的类似闭包的对象,例如PrivilegedActions,被转换为Callable 形式,以便可以提交。 Specifier :接口ExecutorService中的submit参数task - 待提交的任务在FutureAPI中返回:(2)(3)表示该任务正在等待完成,也就是说execute不支持Future设置接收多- 线程执行结果,并提交是的,但是(1)表示Future的get方法成功完成后会返回null。如果返回null,和使用execute有什么区别?我直接使用execute
然后继续看源码,点击进入AbstractExecutorService抽象类源码,发现源码如下:
用户评论
我平时写代码的时候一直把 execute 和 submit 视同义词,现在才知道其实还是有一些区别的! 这篇文章解释得挺清晰的,尤其是例子分析让我一下子就明白了。以后coding的时候要记得分清这两种概念。
有14位网友表示赞同!
终于明白啦! 执行和提交的概念不同啊, 我以前一直弄混淆了。 execute 感觉更像是在代码运行时的瞬间动作,而 submit 是最终把结果提交出去的过程? 文章的讲解很有帮助,清晰易懂!
有16位网友表示赞同!
我觉得文章没讲清楚execute 和 Submit区别在哪里,只是说个大概,例子也比较单一,希望能提供更多实际案例分析!这样才能更深入地理解。
有5位网友表示赞同!
这个定义真的太简洁了! 我以前在用开发工具的时候常常会这两个词搞混淆,现在终于明白了差别所在。感谢作者分享这个知识点!
有13位网友表示赞同!
文章解释的很到位,特别是将execute 和 submit 在不同场景下的应用进行举例说明,让我对它们的操作区别更加清晰,学习到了!
有11位网友表示赞同!
我觉得这篇文章说得不够具体,对于新手来说可能并不容易理解。 例如,在网络表单提交时,execute 和 submit 的含义是否一致? 希望能提供更专业的解释和实际案例讲解!
有20位网友表示赞同!
这个区分很重要啊! 我经常会把 execute 和 submit 混淆,导致代码执行逻辑混乱。 这篇文章帮助我理清思路,以后 coding 要记得分清楚这两个概念!
有10位网友表示赞同!
终于明白了为什么我的提交指令有时候不会立刻生效了,原来是 execute 的问题?这篇文章让我对程序的运行流程有了更深入的理解。
有16位网友表示赞同!
执行和提交啊,这个概念在编程中确实很重要。 但我觉得文章例子不够丰富,希望能涵盖更多不同的场景,例如 API调用、数据库操作等等
有6位网友表示赞同!
非常感谢作者分享知识! 以前我一直把 execute 和 submit 用 interchangeably,现在才知道它们之间的区别很关键。 这篇文章解释得很详细,容易理解。
有14位网友表示赞同!
文章说得很对啊!execute 和 submit 在实际应用中确实有明显区别。 例如,提交代码到版本库是 submit 的动作,而执行代码导致程序运行才是 execute 。
有12位网友表示赞同!
我觉得这篇文章很有帮助,让我更好地理解了 execute 和 submit 的概念。 但我希望作者能提供更多详细的案例分析,以便更深入地学习这些知识点。
有17位网友表示赞同!
真是太感谢你了!我一直很困惑这两个词的区别,今天终于明白了。 文章写的简洁清晰,很好理解。下次可以多一些交互练习吗?
有20位网友表示赞同!
execute 和 submit 的概念确实很重要,希望以后在编程的学习过程中能更加注意区分它们使用场景。 这篇文章内容很干练,非常实用!
有19位网友表示赞同!
我对这个标题感兴趣,因为经常会把 execute 和 submit搞混淆! 但文章解释有点过于简单抽象,我希望提供更多具体的例子来帮助理解。
有16位网友表示赞同!
真是太棒了! 这篇文章点明了我在编程中常犯的错误。 以后一定记住execute 和 submit 的区别!
有19位网友表示赞同!
我觉得这篇文章对初学者很有帮助,可以用更通俗易懂的语言解释两个概念的区别。 例如: execute 是像 “点燃火柴” ,而 submit 是像 "把作业交上去"。
有20位网友表示赞同!