Computer >> Máy Tính >  >> Lập trình >> Java

Tầm quan trọng của các phương thức wait (), allow () và InformAll () trong Java?


Các chuỗi có thể giao tiếp với nhau thông qua wait (), thông báo () tifyAll () các phương thức trong Java. Đây là cuối cùng các phương thức được xác định trong Đối tượng và chỉ có thể được gọi từ trong đồng bộ hóa bối cảnh. Chờ đợi () phương thức khiến luồng hiện tại đợi cho đến khi một luồng khác gọi thông báo () hoặc allowAll () các phương thức cho đối tượng đó. Thông báo () phương pháp đánh thức một chuỗi duy nhất đang chờ trên màn hình của đối tượng đó. tifyAll () phương pháp đánh thức tất cả các chuỗi đang chờ trên màn hình của đối tượng đó. Một chuỗi chờ trên màn hình của đối tượng bằng cách gọi một trong các lệnh wait () phương pháp. Các phương thức này có thể ném IllegalMonitorStateException nếu luồng hiện tại không phải là chủ sở hữu của màn hình của đối tượng.

Cú pháp của phương thức

wait ()

 public final void wait () ném InterruptException 

Cú pháp phương thức thông báo ()

 vô hiệu cuối cùng công khai thông báo () 

Cú pháp của phương thức NotifyAll ()

 vô hiệu cuối cùng công khai thông báoAll ()   

Ví dụ

 public class WaitNotifyTest {private static final long SLEEP_INTERVAL   =3000; boolean private running =true; Chủ đề riêng tư; public void start () {print ("Phương thức bên trong start ()"); thread =new Thread (new Runnable () {@Override public void run () {print ("Inside run () method"); try {Thread.sleep (SLEEP_INTERVAL);} catch (InterruptException e) {Thread.currentThread () .interrupt ();} đã đồng bộ hóa (WaitNotifyTest.this) {running =false; WaitNotifyTest.this.notify ();}}}); thread.start (); } public void join () throws InterruptException {print ("Phương thức bên trong join ()"); sync (this) {while (running) {print ("Đang đợi luồng ngang hàng kết thúc."); đợi đã(); // đang đợi, không chạy} print ("Đã kết thúc luồng ngang hàng."); }} private void print (String s) {System.out.println (s); } public static void main (String [] args) ném InterruptException {WaitNotifyTest test =new WaitNotifyTest (); test.start (); test.join (); }} 

Đầu ra

 Inside start () methodInside join () method Đang chờ chuỗi ngang hàng kết thúc.