MST

星途 面试题库

面试题:Java中使用线程池提交任务时,execute和submit方法有何区别?

在Java线程池的任务提交场景下,请详细阐述execute和submit这两个方法在功能、返回值以及异常处理机制上有哪些不同之处。
25.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

功能

  • execute:用于提交不需要返回值的任务,仅负责将任务添加到线程池的工作队列中,由线程池中的线程执行该任务。
  • submit:不仅可以提交不需要返回值的任务,还可以提交需要返回值的任务。对于需要返回值的任务,它会返回一个Future对象,通过该对象可以获取任务的执行结果。

返回值

  • execute:方法没有返回值。
  • submit:方法返回一个Future对象。若提交的任务有返回值,可通过Futureget()方法获取任务执行结果;若提交的任务无返回值(Runnable任务),返回的Futureget()方法返回null

异常处理机制

  • execute:当任务执行出现异常时,如果没有在任务内部进行处理,会按照线程池的默认异常处理机制处理,通常是将异常堆栈信息输出到控制台。因为execute没有返回值,无法通过返回值获取异常,需要在Runnable实现类的run方法中自行捕获处理异常。
  • submit:提交的任务执行过程中抛出异常,不会直接抛出。可以通过Futureget()方法获取任务执行结果时,如果任务执行过程中抛出异常,get()方法会将该异常重新抛出(ExecutionExceptionInterruptedException等包装异常),调用者可以在调用get()方法的地方捕获并处理异常。