public class InterupsiThread {
    public static void main(String[] args) throws InterruptedException {
        boolean[] berhenti = new boolean[1];

        Thread pekerja = new Thread(() -> {
            try {
                while (!Thread.currentThread().isInterrupted()) {
                    // Simulasi pekerjaan yang bisa berhenti di tengah jalan.
                    Thread.sleep(10);
                }
                // Keluar dari loop karena flag interupsi aktif.
                berhenti[0] = true;
            } catch (InterruptedException e) {
                // sleep() yang sedang berjalan dibatalkan oleh interrupt();
                // kita menandai diri berhenti secara kooperatif.
                berhenti[0] = true;
                Thread.currentThread().interrupt(); // pulihkan flag untuk pemanggil berikutnya
            }
        });
        pekerja.setName("pekerja");

        pekerja.start();
        Thread.sleep(50); // biarkan pekerja bekerja sesaat
        pekerja.interrupt(); // kirim sinyal permintaan berhenti
        pekerja.join();      // tunggu pekerja benar-benar selesai

        System.out.println("pekerja berhenti secara kooperatif: " + berhenti[0]);
    }
}
