Az nem a nyelv hibája, ha nem érted, mi az, hogy async művelet. Meg azt, hogy hogyan lehet egyszálas runtimeban (a JS az egyszálas) async művelet, threadek nélkül.
Másrészt ma már (igazából Java 5 óta) Javaban nem igazán írunk le olyat, hogy new Thread, meg nem subclassolunk Threadet. Callable, Runnable és executorok.
Másrészt async kódból mindig lehet csinálni sync kódot, de ez megfordítva nem igaz.