【问题标题】:What is the difference between submit and execute method with ThreadPoolExecutor [duplicate]ThreadPoolExecutor的提交和执行方法有什么区别[重复]
【发布时间】:2011-04-30 06:54:32
【问题描述】:

我发现有两种方式(提交和执行)将Runnable添加到线程池中,有什么区别?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    不同之处在于execute 不返回Future,因此您不能等待Runnable 完成并使用它获取它引发的任何异常。

    【讨论】:

    • Future 还允许您获取Runnable 抛出的异常。
    • @axtavt:没错,我想我也应该提一下。
    • 另外值得注意的是,由于异常是 Future 返回值的一部分,线程的未捕获异常处理程序将永远不会为 submit 调用,而它将为 execute 调用。
    【解决方案2】:

    提交似乎是一种更通用的执行形式。特别是,提交返回一个代表计算结果的 Future 对象。

    ThreadPoolExecutor-1

    ThreadPoolExecutor -2

    【讨论】:

      【解决方案3】:

      submit(...)方法是ExecutorService接口中引入的执行器框架扩展。

      它与execute(Runnable) 的主要区别在于submit(...) 可以接受Callable<V>(而execute() 只接受Runnable)并返回Future<V> 的实例,您可以稍后在调用程序中使用它异步检索结果(可能会阻塞直到Callable 执行的计算完成)。

      【讨论】:

        猜你喜欢
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        相关资源
        最近更新 更多