import java.time.Duration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

public class VirtualThreadDemo {
    public static void main(String[] args) throws Exception {
        AtomicInteger done = new AtomicInteger();
        try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
            for (int i = 0; i < 10_000; i++) {
                executor.submit(() -> {
                    Thread.sleep(Duration.ofMillis(5));
                    done.incrementAndGet();
                    return null;
                });
            }
        }
        System.out.println("done=" + done.get());
        System.out.println("virtual=" + Thread.ofVirtual().unstarted(() -> {}).isVirtual());
    }
}
