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

Khi nào chúng ta có thể gọi các phương thức wait () và wait (long) của một Thread trong Java?

Bất cứ khi nào đợi () phương thức được gọi trên một đối tượng, nó làm cho 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 () phương thức cho đối tượng này trong khi đợi (thời gian chờ lâu) làm cho chuỗi hiện tại đợi cho đến khi một chuỗi khác gọi thông báo () hoặc allowAll () phương thức cho đối tượng này hoặc thời gian chờ được chỉ định đã trôi qua.

chờ ()

Trong chương trình bên dưới, Khi chờ () được gọi trên một đối tượng, luồng sẽ chuyển từ trạng thái đang chạy sang trạng thái chờ . Nó đợi một số chuỗi khác gọi thông báo () hoặc allowAll () để nó có thể vào trạng thái chạy được, một bế tắc sẽ được hình thành.

Ví dụ

 class MyRunnable thực hiện Runnable {public void run () {sync (this) {System.out.println ("Trong phương thức run ()"); thử {this.wait (); System.out.println ("Luồng đang ở trạng thái chờ, chờ một số luồng khác trên cùng một đối tượng gọi tới thông báo () hoặc thông báoAll ()"); } catch (InterruptException tức là) {ie.printStackTrace (); }}}} public class WaitMethodWithoutParameterTest {public static void main (String [] args) {MyRunnable myRunnable =new MyRunnable (); Luồng luồng =new Thread (myRunnable, "Thread-1"); thread.start (); }} 

Đầu ra

 Trong phương thức run () 


đợi (lâu)

Trong chương trình bên dưới, Khi đợi (1000) được gọi trên một đối tượng, luồng sẽ chuyển từ trạng thái đang chạy sang trạng thái chờ ngay cả khi thông báo () hoặc allowAll () không được gọi sau khi hết thời gian chờ, chuỗi sẽ chuyển từ trạng thái chờ sang trạng thái có thể chạy được.

Ví dụ

 class MyRunnable thực hiện Runnable {public void run () {sync (this) {System.out.println ("Trong phương thức run ()"); thử { this.wait (1000);  System.out.println ("Luồng đang ở trạng thái chờ, chờ một số luồng khác trên cùng một đối tượng gọi tới thông báo () hoặc thông báoAll ()"); } catch (InterruptException tức là) {ie.printStackTrace (); }}}} public class WaitMethodWithParameterTest {public static void main (String [] args) {MyRunnable myRunnable =new MyRunnable (); Luồng luồng =new Thread (myRunnable, "Thread-1"); thread.start (); }} 

Đầu ra

 Trong phương thức run ()