One of the most exciting features delivered by JDK 21 are Virtual Threads, developed by the Loom project. They promise to enable the "simple thread-per-request style to scale with near-optimal hardware utilization". Before Virtual Threads, this could only be achieved with reactive programming, which provides excellent throughput, but with patterns that are difficult to write, read, debug, and profile. It offers outstanding performance, but at the expense of maintainability. This hands-on lab guides you through writing a virtual thread-based application that utilizes structured concurrency to parallelize requests and scoped values to pass sensitive information without relying on method parameters. You will see the patterns of code that the Loom project gives you to achieve the same throughput as a classical reactive application. You will then be able to compare the code patterns of both approaches to choose which one you prefer.