Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan masalah gangguan benang dan keluar di Jawa

Bagaimana untuk menyelesaikan masalah gangguan benang dan keluar di Jawa

WBOY
WBOYasal
2023-10-09 09:16:471085semak imbas

Bagaimana untuk menyelesaikan masalah gangguan benang dan keluar di Jawa

Cara menyelesaikan masalah gangguan thread dan keluar dalam Java

Dalam pembangunan Java, thread ialah salah satu kaedah pengaturcaraan serentak yang biasa digunakan. Walau bagaimanapun, pengendalian gangguan benang dan isu keluar adalah kemahiran penting. Artikel ini akan memperkenalkan cara menyelesaikan masalah gangguan benang dan keluar dengan betul dalam Java dan memberikan contoh kod khusus.

Untuk menunjukkan masalah ini, mari kita anggap ada benang T1, yang melaksanakan tugas yang memakan masa. Kami mahu dapat mengganggu dengan betul dan menghentikan pelaksanaan benang T1 dalam utas utama.

Penyelesaian
Di Java, operasi sampukan dilaksanakan dengan memanggil kaedah interrupt() bagi benang. Apabila kaedah ini dipanggil, benang T1 akan menerima isyarat gangguan. Walau bagaimanapun, utas tidak menghentikan pelaksanaan serta-merta tetapi terus berjalan.

Untuk mengendalikan gangguan benang dengan betul, kita boleh menggunakan strategi dua langkah berikut:

  1. Kesan isyarat gangguan dalam tugas yang memakan masa
    Untuk membolehkan benang T1 mengendalikan isyarat gangguan dalam masa dan keluar, kita perlu mengesan isyarat gangguan dalam tugas yang memakan masa Secara berkala mengesan status gangguan benang. Kod berikut boleh dimasukkan pada kedudukan kritikal tugasan (seperti permulaan gelung):
if(Thread.currentThread().isInterrupted()){
    throw new InterruptedException();
}

Kod ini akan mengesan status gangguan pada urutan semasa dan membuang pengecualian InterruptedException. Dengan menangkap pengecualian ini, anda memberi utas peluang untuk keluar dari tugasan.

Selain itu, jika tugas yang memakan masa ialah operasi menyekat (seperti menunggu sumber luaran untuk bertindak balas), anda boleh menggunakan kaedah sekatan boleh terganggu, seperti Thread.sleep() dan Object.wait(). Kaedah ini akan segera membuang InterruptedException apabila diganggu Kita hanya perlu keluar selepas menangkap pengecualian. .

  1. Berikut ialah contoh kod lengkap:
    public class InterruptExample {
    
        public static void main(String[] args) throws InterruptedException {
            Thread t1 = new Thread(new Worker());
            t1.start();
    
            // 休眠3秒,等待t1线程执行
            Thread.sleep(3000);
    
            // 中断线程t1
            t1.interrupt();
        }
    
        public static class Worker implements Runnable {
            public void run() {
                try {
                    while (true) {
                        // 假设这里是一个耗时的任务
                        if (Thread.currentThread().isInterrupted()) {
                            throw new InterruptedException();
                        }
                        System.out.println("Running...");
                    }
                } catch (InterruptedException e) {
                    System.out.println("Caught InterruptedException, exiting...");
                }
            }
        }
    }
  2. Dalam kod di atas, kami mencipta utas Pekerja dan memulakannya dalam utas utama. Selepas utas utama tidur selama 3 saat, panggil t1.interrupt() untuk mengganggu pelaksanaan utas Worker.

Dalam kaedah run() thread Worker, kami menggunakan kaedah isInterrupted() untuk mengesan status gangguan dan membuang InterruptedException apabila kami perlu keluar.

Ringkasan

Mengendalikan gangguan thread dan isu keluar di Java adalah kemahiran penting dalam pengaturcaraan serentak. Mengesan isyarat sampukan dalam tugas yang memakan masa dan menggunakan kaedah sekatan boleh terganggu boleh membenarkan benang keluar tepat pada masanya. Menghantar isyarat sampukan dalam benang utama boleh menghantar isyarat sampukan kepada benang yang berfungsi untuk meningkatkan kebolehkawalan atur cara.

Semoga penyelesaian dan contoh kod dalam artikel ini dapat membantu anda mengendalikan masalah gangguan benang dan keluar di Java dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah gangguan benang dan keluar di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn