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.