Rumah > Java > javaTutorial > teks badan

Mengapa saya mendapat IllegalMonitorStateException apabila menggunakan wait() dan notify() dalam Java?

Mary-Kate Olsen
Lepaskan: 2024-10-31 23:14:29
asal
475 orang telah melayarinya

Why am I getting an IllegalMonitorStateException when using wait() and notify() in Java?

IllegalMonitorStateException dalam Java Tunggu dan Maklumkan

Memahami Tunggu dan Maklumkan

Kaedah wait() dan notify() untuk kelas Objek digunakan untuk komunikasi antara benang di Jawa. wait() menyebabkan utas panggilan menunggu sehingga utas lain memanggil notify() pada objek yang sama, melepaskan utas untuk meneruskan pelaksanaan.

IllegalMonitorStateException

IllegalMonitorStateException ialah dilemparkan apabila benang cuba menunggu pada objek tanpa memegang kunci intrinsiknya. Kunci ini diperoleh dengan menyegerakkan pada objek menggunakan blok atau kaedah yang disegerakkan.

Dalam Kod Disediakan

Kod yang anda berikan menghadapi pengecualian ini kerana kaedah wait() dipanggil tanpa menyegerakkan pada objek yang sesuai. Dalam kelas Runner, kaedah wait() dipanggil dalam kaedah run(). Walau bagaimanapun, kaedah run() tidak disegerakkan pada mana-mana objek.

Penyelesaian

Untuk membetulkannya, anda mesti menyegerakkan kaedah run() pada Main.main objek, iaitu objek yang menunggu() dipanggil. Ini memastikan bahawa utas semasa memegang kunci intrinsik pada Main.main sebelum cuba menunggu.

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

Penyegerakan ini memastikan bahawa utas semasa memperoleh kunci intrinsik pada Main.main sebelum memanggil tunggu(), menghalang IllegalMonitorStateException daripada dibuang.

Atas ialah kandungan terperinci Mengapa saya mendapat IllegalMonitorStateException apabila menggunakan wait() dan notify() 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!