Start here. This is the direct spoken answer to practice first.
Overview
Virtual threads make thread-per-task blocking code scalable for suitable workloads by decoupling Java task count from platform-thread count.
A platform thread is typically backed by an operating-system thread for its lifetime. A virtual thread is a lightweight Java thread scheduled by the JVM over a smaller set of carrier platform threads. When a virtual thread blocks in supported operations, the JVM can usually unmount it so the carrier runs other work. This improves throughput for many blocking I/O tasks; it does not make CPU-bound work execute faster than available cores.