I found there are two ways (submit and execute) to add a Runnable into a thread pool, what is the difference?