23 lines
1.2 KiB
Java
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();
|
|
}
|
|
}
|