Java's Wait and Notify: Understanding IllegalMonitorStateException
Di Java, tunggu dan maklumkan kaedah membenarkan urutan untuk menyegerakkan pelaksanaannya. Walau bagaimanapun, menggunakan kaedah ini secara tidak betul boleh membawa kepada IllegalMonitorStateException.
Untuk memahami sebabnya, mari analisa kod yang disediakan:
Main.java
Runner.java
Isunya terletak pada panggilan tunggu() dalam Runner.run(). Apabila benang memanggil wait() pada objek, ia mesti memiliki monitor objek itu. Pemilikan diwujudkan dengan menyegerakkan pada objek.
Untuk membetulkan isu, segerakkan pada Main.main dalam panggilan tunggu():
<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>
Ini memastikan bahawa utas semasa memiliki Utama. monitor utama sebelum memasuki keadaan tunggu().
Prinsip yang sama digunakan untuk notify() dan notifyAll(). Benang mesti memiliki monitor objek sebelum mengeluarkan kaedah ini.
Atas ialah kandungan terperinci Mengapa Saya Mendapat IllegalMonitorStateException Apabila Menggunakan Wait and Notify Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!