Rumah > Java > javaTutorial > Mengapa Saya Mendapat `IllegalMonitorStateException` Apabila Menggunakan `wait()` dalam Java?

Mengapa Saya Mendapat `IllegalMonitorStateException` Apabila Menggunakan `wait()` dalam Java?

Mary-Kate Olsen
Lepaskan: 2024-11-01 05:25:02
asal
663 orang telah melayarinya

Why Do I Get `IllegalMonitorStateException` When Using `wait()` in Java?

Java Wait and Notify: Memahami IllegalMonitorStateException

Dalam pengaturcaraan berbilang benang, kaedah wait() dan notify() membenarkan urutan menyelaraskan tindakannya. Walau bagaimanapun, menggunakan kaedah ini secara tidak betul boleh membawa kepada IllegalMonitorStateException.

Dalam coretan kod yang diberikan, dalam kelas Utama, anda cuba memanggil wait() pada Main.main. Walau bagaimanapun, anda menghadapi IllegalMonitorStateException. Ini kerana benang semasa (benang utama) tidak memegang kunci pada objek Utama.

Untuk menangani isu ini, anda perlu menyegerakkan blok kod tempat wait() dipanggil. Ini boleh dicapai dengan menggunakan blok disegerakkan(...) pada objek yang anda mahu tunggu. Dalam kes ini, ia ialah objek Utama.utama:

<code class="java">public void run() {
    try {
        synchronized (Main.main) {
            Main.main.wait();
        }
    } catch (InterruptedException e) {}
    System.out.println("Runner away!");
}</code>
Salin selepas log masuk

Dengan menyegerakkan pada objek Utama.utama, anda memastikan bahawa benang semasa (benang pelari) memperoleh kunci pada objek sebelum melaksanakan penantian (). Apabila notifyAll() dipanggil daripada kelas Utama, semua urutan pelari akan dimaklumkan dan boleh meneruskan pelaksanaannya.

Prinsip yang sama digunakan untuk kaedah notify() dan notifyAll(). Ia hanya boleh dipanggil oleh benang yang memegang kunci pada objek yang disegerakkan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat `IllegalMonitorStateException` Apabila Menggunakan `wait()` dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan