I found there are two ways (submit and execute) to add a Runnable into a thread pool, what is the difference?
Asked
Active
Viewed 4.7k times
3 Answers
39
The difference is that execute
doesn't return a Future
, so you can't wait for the completion of the Runnable
and get any exception it throws using that.

ColinD
- 108,630
- 30
- 201
- 202
-
4`Future` also allows you to get exceptions thrown by `Runnable`. – axtavt Oct 25 '10 at 15:36
-
@axtavt: True, guess I should mention that too. – ColinD Oct 25 '10 at 15:40
-
2Also good to note that as a consequence of the exception being part of the Future's return value, the thread's uncaught exception handler will never be called for `submit`, whereas it will for `execute`. – Dennie Apr 03 '18 at 10:08
16
The submit(...)
method is an executor framework extension introduced in ExecutorService
interface.
Its main difference from execute(Runnable)
is that submit(...)
can accept a Callable<V>
(whereas execute()
accepts only Runnable
) and returns an instance of Future<V>
, which you can use later in the caller to retrieve the result asynchronously (potentially blocking until the computation performed by the Callable
is completed).

Nathan Hughes
- 94,330
- 19
- 181
- 276

Victor Sorokin
- 11,878
- 2
- 35
- 51
1
Submit appears to be a more generic form of execute. In particular, submit returns a Future object that represents the result of the computation.

Rahul Baradia
- 11,802
- 17
- 73
- 121

AdamH
- 1,378
- 9
- 10