public class ThreadDaemon {
    public static void main(String[] args) throws InterruptedException {
        // Bagian 1: thread daemon -- tidak menahan JVM tetap hidup.
        Thread daemon = new Thread(() -> {
            try {
                Thread.sleep(500);
                // Baris di bawah ini TIDAK PERNAH tercetak: JVM sudah keluar
                // lebih dulu karena hanya thread daemon yang tersisa.
                System.out.println("baris ini tidak pernah tercetak");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }, "pemantau-daemon");
        daemon.setDaemon(true); // wajib dipanggil sebelum start()
        daemon.start();

        System.out.println("daemon aktif : " + daemon.isDaemon());

        // Bagian 2: thread biasa (user thread) -- menahan JVM tetap hidup.
        Thread user = new Thread(() -> {
            try {
                Thread.sleep(200);
                System.out.println("pemantau-user selesai -- JVM menunggu thread ini");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }, "pemantau-user");
        user.start();

        System.out.println("main selesai -- sisanya diserahkan pada JVM");
    }
}
