They give you the tools to just say "go away and do these things", which after years of dealing directly with pthreads in C was a breath of fresh air!
which presents threads as the solution to the pain of using futures.
A future internally is just a value or a set of waiters. Whether they are "colored" (ie. can you wait on a future in a non-future context), or based on threads or cooperative concurrency (ie. async) etc. is entirely an implementation detail, with significantly differing trade-offs.
In that sense, you can really only compare future implementations with other concurrency systems.
Executors are the way to go for almost all finite-time concurrency.
New threads should normally only be used for stuff that keeps running until the process quits.