In the JVM, threads are just thin wrappers around native OS threads. And native OS threads have a high footprint and creating them/switching between them is not a lightweigh