Executes the given Runnable action asynchronously in some thread.
The implementation may create a new thread to execute the action, or it may execute the
action in an existing thread.
The execution of a given action must not be delayed indefinitely in order to complete
execution of a different action passed to a different invocation of this method. In other
words, the implementation must assume that there may be arbitrary dependencies between
actions passed to this method, so it needs to be careful to avoid potential deadlock by
delaying execution of one action indefinitely until another completes.
Also, this method itself must not block, because it may be invoked by code that is serially
processing data to produce multiple such arbitrarily-dependent actions that need to be
runnable - the Runnable action to execute
name - string to include in the name of the thread used to execute the action