public class VirtualThreadDasar {
    public static void main(String[] args) throws InterruptedException {
        String[] hasil = new String[5];

        // Bentuk 1: bangun dan mulai virtual thread dengan nama.
        Thread kurator1 = Thread.ofVirtual().name("kurator-1").start(() ->
                hasil[0] = "katalog diproses");
        Thread kurator2 = Thread.ofVirtual().name("kurator-2").start(() ->
                hasil[1] = "tag diperbarui");

        // Bentuk 2: builder dipakai ulang, nama berurutan dibuat otomatis.
        Thread.Builder.OfVirtual pembangun = Thread.ofVirtual().name("pekerja-", 0);
        Thread pekerja0 = pembangun.start(() -> hasil[2] = "berkas-1 diarsipkan");
        Thread pekerja1 = pembangun.start(() -> hasil[3] = "berkas-2 diarsipkan");

        // Pembanding: thread platform biasa (mahal, dikelola OS).
        Thread pengawas = Thread.ofPlatform().name("pengawas").start(() ->
                hasil[4] = "audit selesai");

        Thread[] semua = {kurator1, kurator2, pekerja0, pekerja1, pengawas};
        for (Thread t : semua) {
            t.join();
        }
        for (int i = 0; i < semua.length; i++) {
            System.out.println(semua[i].getName() + " -> " + hasil[i]
                    + " (virtual: " + semua[i].isVirtual() + ")");
        }
    }
}
