Files

23 lines
1.2 KiB
Java

import java.time.Duration;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
/** JEP 444 (final): 10,000 blocking tasks on virtual threads. Timing is machine dependent, so only counts are asserted. */
public class VirtualThreadsDemo {
public static void main(String[] args) throws Exception {
AtomicInteger done = new AtomicInteger();
long t0 = System.nanoTime();
try (ExecutorService ex = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10_000; i++) ex.submit(() -> { Thread.sleep(Duration.ofSeconds(1)); done.incrementAndGet(); return null; });
}
long ms = (System.nanoTime() - t0) / 1_000_000;
System.out.println("tasks completed : " + done.get());
System.out.println("finished in < 5s: " + (ms < 5_000) + " (10,000 x 1s sleeps)");
Thread v = Thread.ofVirtual().name("demo-vt").start(() -> System.out.println("isVirtual : " + Thread.currentThread().isVirtual() + ", daemon=" + Thread.currentThread().isDaemon()));
v.join();
Thread p = Thread.ofPlatform().name("demo-pt").start(() -> System.out.println("platform isVirtual: " + Thread.currentThread().isVirtual()));
p.join();
}
}