Multithreading has been in Java from day one but there is no such similar concept in the JavaScript world. Programmers using JavaScript have predominantly used asynchronous programming, callbacks, promises, and async-await. May be not too surprising, however, both the .NET platform/C# and the JVM/Java introduced asynchronous programming much later in their evolution. On the JVM we now have three options, multithreading APIs, CompletableFuture, and the Virtual Threads (as part of Project Loom). In this keynote we will discuss the APIs of the present and the future. Then we will dive into the nature of the problems and the approaches to solutions where one particular API may be better suited than the other. We will tease apart the details of these APIs to improve clarity of what they provide and when and where we should use one over the other.