The difference between Executors.newSingleThreadExecutor().execute(command) and new Thread(command).start();
Behaviourally, pretty much nothing.
However, once you have an Executor
instance, you can submit multiple tasks to it, and have them executed one after another. You can't do that simply with a raw Thread
.
One noticeable difference, is when you run new Thread(someRunnable).start();
when the runnable is finished the thread will die quietly.
The Executor though will persist until you shut it down. So running Executors.newSingleThreadExecutor().execute(command)
When you think your application or the JVM may be finished the Executor may still be running in a background thread.
With Executor.execute
, if an Error
or RuntimeException
is thrown in the Executor
it will be swallowed silently, while the new Thread()
will print it to System.err
.