This future task has a special ability to start execution in the thread requesting the
#get() IF it has not already started. It is still expected that this future will be
provided to an executor, but if that executor has been unable to start execution by the time
#get() is requested, execution will start on the
#get() thread.
This can make sense if for example you need to have the result of a given future before you can
go forward with additional work. That way if the thread pool is too busy with other things, we
can try to get the result for this work unit as fast as possible (once we are ready for it).
If execution starts on the
#get() call, once the task is started in the thread pool, it
will return immediately (WITHOUT invoking the task contained in the future).
This does come with some details to be aware of. Execution may only occur on the
#get() request. Requesting
#get(long,java.util.concurrent.TimeUnit) will NOT
cause execution to start (as we can not ensure a timeout will be respected). In addition this
can not work with recurring tasks.