Rumah >Java >javaTutorial >Mengapa Mesti Object.wait() Sentiasa Dipanggil Dalam Blok Tersegerak?
Object.wait() mesti berada dalam blok yang disegerakkan untuk menjamin keselamatan thread dan mencegah IllegalMonitorStateException.
Tunggu mengeluarkan monitor yang dikaitkan dengan objek, membenarkan urutan lain memperolehnya. Jika wait() boleh digunakan di luar blok yang disegerakkan, tingkah laku yang tidak dapat diramalkan boleh timbul.
Pertimbangkan pelaksanaan baris gilir yang menyekat tanpa tunggu yang disegerakkan():
class BlockingQueue { Queue<String> buffer = new LinkedList<>(); public void give(String data) { buffer.add(data); notify(); // Signal waiting consumer } public String take() throws InterruptedException { while (buffer.isEmpty()) { wait(); // Suspend thread without synchronization } return buffer.remove(); } }
Dalam ini contoh:
Isu penyegerakan ini terpakai secara universal untuk menunggu/ memberitahu mekanisme, tanpa mengira pelaksanaan khusus. Tanpa penyegerakan, sentiasa ada risiko keadaan perlumbaan dan tingkah laku benang yang tidak dapat diramalkan. Oleh itu, peraturan "tunggu di dalam disegerakkan" memastikan keselamatan rangkaian dan menghalang isu sedemikian.
Atas ialah kandungan terperinci Mengapa Mesti Object.wait() Sentiasa Dipanggil Dalam Blok Tersegerak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!