JVM / Java / Threads / Virtual Threads
Virtual Threads
Thousands/millions of threads possible.
Simplifies concurrency massively.
Much simpler and massively scalable.
Perfect for:
- REST APIs
- DB calls
- microservices
- messaging systems
Not useful for:
- heavy CPU tasks
- tight computation loops
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class VirtualThreadsExample {
void main() throws Exception {
System.out.println("Platform threads (fixed pool 10):\n");
long start1 = System.currentTimeMillis();
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i=0; i<100; i++) {
int taskId = i;
executor.submit(() -> doWork("T-" + taskId));
}
executor.shutdown();
while (!executor.isTerminated()) {}
long end1 = System.currentTimeMillis();
System.out.println("\nTime: " + (end1 - start1) + " ms");
System.out.println("\n============================\n");
System.out.println("Virtual threads:\n");
long start2 = System.currentTimeMillis();
try (var virtualExecutor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i=0; i<100; i++) {
int taskId = i;
virtualExecutor.submit(() -> doWork("V-" + taskId));
}
}
long end2 = System.currentTimeMillis();
System.out.println("\nTime: " + (end2 - start2) + " ms");
}
static void doWork(String name) {
try {
System.out.println(name + " START");
Thread.sleep(1000);
System.out.println(name + " END");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}