I think you're mixing up async execution and multithreading. They're quite different concepts, although you can offload an awaited work on another thread.
Almost any language supports spawning a new thread.
No, it really is. I've got experience with multiple languages / multithreading approaches and could argue it means 3 different things. I don't know what others think the question is about.
Java already did it in the past, that is why we have the notion of green threads versus red threads.
What virtual threads bring to the table is that now they are both officially supported, with APIs for both cases, while previously it was an implementation detail of each JVM how threading was actually done.
Almost any language supports spawning a new thread.