ื‘ืžืืžืจ ื–ื”, ื ืกืชื›ืœ ืขืœ ืฉื™ื˜ืช wait() ืœืฉืœื™ื˜ื” ื‘ืฉืจืฉื•ืจ, ื•ืืช ื”ืžืชื•ื“ื•ืช notify() / notifyAll() . ืฉื™ื˜ื•ืช ืืœื• ืžื•ื’ื“ืจื•ืช ื‘ืžื—ืœืงื” ื”ื‘ืกื™ืกื™ืช java.lang.Object ื•ื‘ื”ืชืื ืœื›ืš, ืžื ื’ื ื•ื ื™ ื”ื”ื•ืจืฉื” ืฉื ืžืฆืื™ื ื‘-Java ืžืกืคืงื™ื ืืช ื”ืฉื™ื˜ื•ืช ื”ืœืœื• ืœื›ืœ ื”ืžื—ืœืงื•ืช. ื›ืœื•ืžืจ, ื›ืฉืืชื” ื™ื•ืฆืจ ืžื—ืœืงื” ืžืฉืœืš ื•ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœื”, ืืชื” ืชืžื™ื“ ื™ื›ื•ืœ ืœืงืจื•ื ืœืฉื™ื˜ื•ืช ื”ืืœื”.

ื›ื™ืฆื“ ืคื•ืขืœื•ืช ื”ืžืชื•ื“ื•ืช wait() ื•-notify()/notifyAll()?

  • wait() . ื‘ืงื™ืฆื•ืจ, ืฉื™ื˜ื” ื–ื• ืžืฉื—ืจืจืช ืืช ื”ืžื•ื ื™ื˜ื•ืจ ื•ืžื›ื ื™ืกื” ืืช ื”ืฉืจืฉื•ืจ ื”ืงื•ืจื ืœืžืฆื‘ ื”ืžืชื ื” ืขื“ ืฉืจืฉื•ืจ ืื—ืจ ื™ืงืจื ืœืฉื™ื˜ืช notify() / notifyAll() ;
  • ืœื”ื•ื“ื™ืข() . ืžืžืฉื™ืš ืืช ื”ืขื‘ื•ื“ื” ืฉืœ ืฉืจืฉื•ืจ ืฉืฉื™ื˜ืช ื”-wait() ืฉืœื• ื ืงืจืื” ื‘ืขื‘ืจ;
  • ื”ืฉื™ื˜ื” notifyAll() ืžื—ื“ืฉืช ืืช ื›ืœ ื”ืฉืจืฉื•ืจื™ื ืฉื ืงืจืื• ื‘ืขื‘ืจ ืœืฉื™ื˜ืช wait() ืฉืœื”ื.
ื›ืขืช ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ืฉื™ื˜ืช wait() . ื”ืžื—ืœืงื” Object ืžื›ื™ืœื” ืฉืœื•ืฉ ืืคืฉืจื•ื™ื•ืช ืœืฉื™ื˜ื” ื–ื•:
  • ื”ืžืชื ื” ืฉืœ ืจื™ืง ืžืงื•ืจื™ ืื—ืจื•ืŸ ืฆื™ื‘ื•ืจื™ (ื–ืžืŸ ืงืฆื•ื‘ ืืจื•ืš Millis) ื–ื•ืจืง InterruptedException ; ื–ื” ื’ื•ืจื ืœืฉืจืฉื•ืจ ื”ื ื•ื›ื—ื™ ืœื”ืžืชื™ืŸ ืขื“ ืฉื”ื•ื ืžืชืขื•ืจืจ. ื‘ื“ืจืš ื›ืœืœ ื–ื” ืงื•ืจื” ืขืœ ื™ื“ื™ ืงื‘ืœืช ื”ื•ื“ืขื” ืื• ื”ืคืจืขื”, ืื• ืขื“ ืฉื—ืœืคื” ื›ืžื•ืช ืžืกื•ื™ืžืช ืฉืœ ื–ืžืŸ ืืžืช.

  • public final void wait() ื–ื•ืจืง InterruptedException . ืœื ื‘ืžืงืจื” ื›ืชื‘ื ื• ืฉื™ื˜ื” ืœืœื ืคืจืžื˜ืจื™ื ื‘ืชื•ืจ ื”ืฉื ื™ื™ื”. ืœืžืขืฉื”, ืื ืืชื” ืžืกืชื›ืœ ืขืœ ื”ืงื•ื“ ืฉืœื•, ื”ื•ื ืžืชื™ื™ื—ืก ืœื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ืฉื™ื˜ื”, ื™ืฉ ืœื• ืจืง ืืช ื”ืืจื’ื•ืžื ื˜ 0L.

  • ื”ืžืชื ื” ืกื•ืคื™ืช ืฆื™ื‘ื•ืจื™ืช (ืคืกืง ื–ืžืŸ ืืจื•ืš, ื ื ื• ืื™ื ื˜.) . ื’ื•ืจื ืœืฉืจืฉื•ืจ ื”ื ื•ื›ื—ื™ ืœื”ืžืชื™ืŸ ืขื“ ืฉื”ื•ื ืžืชืขื•ืจืจ, ื‘ื“ืจืš ื›ืœืœ ืขืœ ื™ื“ื™ ืงื‘ืœืช ื”ื•ื“ืขื” ืื• ื”ืคืจืขื”, ืื• ืขื“ ืฉื—ืœืคื” ื›ืžื•ืช ืžืกื•ื™ืžืช ืฉืœ ื–ืžืŸ ืืžืช.

ื”ืฉื™ื˜ื” wait() ื ื•ืขื“ื” ืœื”ืฉืขื•ืช ืืช ื”ืฉืจืฉื•ืจ ื”ืงื•ืจื. ืžื” ื–ื” ืื•ืžืจ? ืฉื™ื˜ื•ืช ืืœื• ืฉื™ื™ื›ื•ืช ืœื›ื™ืชื”. ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžื—ืœืงื”, ืืชื” ื™ื•ืฆืจ ืื•ื‘ื™ื™ืงื˜. ืื•ื‘ื™ื™ืงื˜ื™ื ืงื™ื™ืžื™ื ื‘ื—ืœืง ืžื”ืฉืจืฉื•ืจื™ื. ื›ืœื•ืžืจ, ืื•ื‘ื™ื™ืงื˜ื™ื ื ื•ืฆืจื™ื ื‘ื—ื•ื˜ื™ื ืžืกื•ื™ืžื™ื. ื‘ืฉืจืฉื•ืจ ื‘ื• ื”ืื•ื‘ื™ื™ืงื˜ ื”ื–ื” ืขื•ื‘ื“, ืื ืชืงืจื ื‘ื• wait() ื–ื” ื™ื•ื‘ื™ืœ ืœื›ืš ืฉื”ืฉืจืฉื•ืจ ื”ื–ื” ื™ื™ืคืกืง. ื”ืื•ื‘ื™ื™ืงื˜ ืขืฆืžื• ืคื•ืขืœ ื›ืžืขื™ืŸ ืžื•ื ื™ื˜ื•ืจ. ืžื” ื–ื”? ื‘ืจื•ืจ ืฉื ื™ืชืŸ ืœื™ืฆื•ืจ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื•ื ื™ื ื•ื›ื•ืœื ื™ื›ื™ืœื• ืืช ืฉื™ื˜ืช wait() . ื™ืฉื ื” ื”ื‘ื ื” ืื™ื–ื” ืื•ื‘ื™ื™ืงื˜ ื’ืจื ืœืขืฆื™ืจื” ืฉืœ ื—ื•ื˜ ืžืกื•ื™ื. ื”ืฉืจืฉื•ืจ ื ืขืฆืจ ื•ื™ื—ื›ื” ื›ืœ ืขื•ื“ ื”ื•ื ื›ืชื•ื‘ ื‘ืคืจืžื˜ืจ. ื•ืื– ื–ื” ื™ืชื—ื™ืœ. ื”ืฉืจืฉื•ืจ ื”ื–ื” ืœื ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื‘ืขืฆืžื•. ื›ื“ื™ ืœื—ื“ืฉ ืืช ื”ืขื‘ื•ื“ื”, ื™ืฉื ืŸ ืฉื™ื˜ื•ืช ื”ื•ื“ืข ื•ื”ื•ื“ื™ืข โ€‹โ€‹ื›ืœ. ืงืจื™ืื” ืœ- notify() ืื• notifyAll() ื—ื™ื™ื‘ืช ืœื”ืคืขื™ืœ ืฉืจืฉื•ืจ ืื—ืจ. ืขื wait() , ืืชื” ื™ื›ื•ืœ ืœืขืฆื•ืจ ืฉืจืฉื•ืจื™ื ืžืจื•ื‘ื™ื, ื•ืœื”ืชื—ื™ืœ ืืช ื›ืœ ื”ืฉืจืฉื•ืจื™ื ืขื notifyAll() . ืื ืžืกืคืจ ืฉืจืฉื•ืจื™ื ื ืขืฆืจื• ื•ื ืงืจื notify() , ืื™ ืืคืฉืจ ืœื“ืขืช ื‘ื“ื™ื•ืง ืื™ื–ื” ืฉืจืฉื•ืจ ื™ื—ื“ืฉ ืืช ื”ืฉื™ื˜ื” ื”ื–ื•. ืื ืื™ืŸ ืฉืจืฉื•ืจื™ื ืžืžืชื™ื ื™ื ื‘ืฉื™ื˜ืช wait() ืื– ืฉื•ื ื“ื‘ืจ ืœื ืงื•ืจื” ื›ืฉื ืงืจื notify() ืื• notifyAll() . ืฉืจืฉื•ืจ ื™ื›ื•ืœ ืœืงืจื•ื ืœืฉื™ื˜ื•ืช wait() ืื• notify() ืขืœ ืื•ื‘ื™ื™ืงื˜ ืžืกื•ื™ื ืจืง ืื ื™ืฉ ืœื• ื›ืจื’ืข ื ืขื™ืœื” ืขืœ ื”ืื•ื‘ื™ื™ืงื˜ ื”ื–ื”. wait() , notify() ื•- notifyAll() ืฆืจื™ื›ื™ื ืœื”ื™ืงืจื ืจืง ืžืงื•ื“ ืžืกื•ื ื›ืจืŸ.

ื“ื•ื’ืžื” ืœืฉื™ื˜ืช Wait()

ื›ืืŸ ื™ืฉ ืœื ื• ืืช ืื—ืช ื”ื“ื•ื’ืžืื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื‘ื™ื•ืชืจ ืฉืžืžื—ื™ืฉื•ืช ื›ื™ืฆื“ ื”ืฉื™ื˜ื” ืขื•ื‘ื“ืช. ื ื ื™ื— ืฉื™ืฉ ืœื ื• ื—ื ื•ืช, ื™ืฆืจืŸ ื•ืฆืจื›ืŸ. ื”ื™ืฆืจืŸ ืžืขื‘ื™ืจ ื›ืžื” ืžื•ืฆืจื™ ื™ื™ืฆื•ืจ ืœื—ื ื•ืช, ื•ืœืื—ืจ ืžื›ืŸ ื”ืฆืจื›ืŸ ื™ื›ื•ืœ ืœืงื—ืช ืื•ืชื. ืชืŸ ืœื™ืฆืจืŸ ืœื™ื™ืฆืจ 8 ืžื•ืฆืจื™ื, ื‘ื”ืชืืžื”, ื”ืฆืจื›ืŸ ื—ื™ื™ื‘ ืœืงื ื•ืช ืืช ื›ื•ืœื. ืืš ื™ื—ื“ ืขื ื–ืืช, ืœื ื™ื•ืชืจ ืž-6 ืคืจื™ื˜ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื‘ืžื—ืกืŸ ื‘ื• ื–ืžื ื™ืช. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืฉื™ื˜ื•ืช wait() ื•- notify() . ื”ื‘ื” ื ื’ื“ื™ืจ ืฉืœื•ืฉ ืžื—ืœืงื•ืช : ืฉื•ืง , ื™ืฆืจืŸ ื•ืœืงื•ื— . ื”ืฉื™ื˜ื” Manufacturer in the run() ืžื•ืกื™ืคื” 8 ืžื•ืฆืจื™ื ืœืื•ื‘ื™ื™ืงื˜ Market ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช put() ืฉืœื• . ื”ืœืงื•ื— ื‘ืฉื™ื˜ืช run() ื‘ืœื•ืœืื” ืงื•ืจื ืœืฉื™ื˜ืช get ืฉืœ ืื•ื‘ื™ื™ืงื˜ Market ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ืžื•ืฆืจื™ื ื”ืœืœื•. ืฉื™ื˜ื•ืช ื”-put and get ืฉืœ ืžื—ืœืงืช Market ืžืกื•ื ื›ืจื ื•ืช. ื›ื“ื™ ืœืขืงื•ื‘ ืื—ืจ ื ื•ื›ื—ื•ืช ื”ืกื—ื•ืจื” ื‘ืžื—ืœืงืช ื”ืฉื•ืง , ืื ื• ื‘ื•ื“ืงื™ื ืืช ื”ืขืจืš ืฉืœ ืžืฉืชื ื” ื”ืคืจื™ื˜. ื”ืฉื™ื˜ื” get() ืœื”ืฉื’ืช ืžื•ืฆืจ ืฆืจื™ื›ื” ืœืคืขื•ืœ ืจืง ืื ื™ืฉ ืœืคื—ื•ืช ืžื•ืฆืจ ืื—ื“. ืœื›ืŸ ื‘ืฉื™ื˜ืช get ืื ื—ื ื• ื‘ื•ื“ืงื™ื ืื ื”ืžื•ืฆืจ ื—ืกืจ. ืื ื”ืคืจื™ื˜ ืื™ื ื• ื–ืžื™ืŸ, ื”ืฉื™ื˜ื” wait() ื ืงืจืืช. ืฉื™ื˜ื” ื–ื• ืžืฉื—ืจืจืช ืืช ื”ืžื•ื ื™ื˜ื•ืจ ืฉืœ ืื•ื‘ื™ื™ืงื˜ Market ื•ื—ื•ืกืžืช ืืช ืฉื™ื˜ืช get ืขื“ ืฉื”ืžืชื•ื“ื” notify() ื ืงืจืืช ื‘ืื•ืชื• ืžื•ื ื™ื˜ื•ืจ. ื›ืืฉืจ ืคืจื™ื˜ ืžืชื•ื•ืกืฃ ื‘ืฉื™ื˜ืช put() ื•ื ืงืจื notify() , ื”ืฉื™ื˜ื” get() ืžืงื‘ืœืช ืืช ื”ืžื•ื ื™ื˜ื•ืจ. ืœืื—ืจ ืžื›ืŸ, ื”ืœืงื•ื— ืฉืœื ื• ืžืงื‘ืœ ืคืจื™ื˜. ืœืฉื ื›ืš, ืžื•ืฆื’ืช ื”ื•ื“ืขื”, ื•ืขืจืš ื”ืคืจื™ื˜ ืžื•ืคื—ืช. ืœื‘ืกื•ืฃ, ื”ืงืจื™ืื” ืœืฉื™ื˜ืช notify() ืžืื•ืชืชืช ืœืฉื™ื˜ืช put() ืœื”ืžืฉื™ืš. ื‘ืฉื™ื˜ืช put() ืœื•ื’ื™ืงื” ื“ื•ืžื” ืขื•ื‘ื“ืช, ืจืง ืฉื›ืขืช ืฉื™ื˜ืช put() ืืžื•ืจื” ืœืขื‘ื•ื“ ืื ืื™ืŸ ื™ื•ืชืจ ืž-6 ืžื•ืฆืจื™ื ื‘- Market .
class Market {

   private int item = 0;

   public synchronized void get() {
       //here we use wait() method
       while (item < 1) {
           try {
               wait();
           }
           catch (InterruptedException e) {
           }
       }
       item--;
       System.out.println("A client has bought 1 item...");
       System.out.println("Items quantity in Market warehouse... " + item);
       notify();
   }

   public synchronized void put() {
       //here we use wait() method when the Warehouse is full
       while (item >= 6) {
           try {
               wait();
           }
           catch (InterruptedException e) {
           }
       }
       item ++;
       System.out.println("Manufacturer has added 1 more item...");
       System.out.println("Now there are " + item + " items in Warehouse" );
       notify();
   }
}

class Manufacturer implements Runnable {

   Market market;

   Manufacturer(Market market) {
       this.market = market;
   }


   public void run() {
       for (int i = 0; i < 8; i++) {
           market.put();
       }
   }
}

class Client implements Runnable {

   Market market;
   Client(Market market) {
       this.market = market;
   }
   public void run() {
       for (int i = 0; i < 8; i++) {
           market.get();
       }
   }
}
//wait() method test class
public class WaitTest {
   public static void main(String[] args) {

       Market market = new Market();
       Manufacturer manufacturer = new Manufacturer(market);
       Client client = new Client(market);
       new Thread(manufacturer).start();
       new Thread(client).start();
   }
}
ื›ืืŸ, ื‘ืืžืฆืขื•ืช wait() ื‘ืฉื™ื˜ืช get() ืื ื• ืžืžืชื™ื ื™ื ืฉื”ื™ืฆืจืŸ ื™ื•ืกื™ืฃ ืคืจื™ื˜ ื—ื“ืฉ. ื•ืื—ืจื™ ื”ื”ื•ืกืคื”, ืื ื• ืžืชืงืฉืจื™ื ืœ-notify() , ื›ืื™ืœื• ืื•ืžืจื™ื ืฉืžืงื•ื ืื—ื“ ื”ืคืš ืคื ื•ื™ ื‘ืžื—ืกืŸ , ื•ืชื•ื›ืœ ืœื”ื•ืกื™ืฃ ืขื•ื“. ื‘ืฉื™ื˜ืช put() ื‘ืืžืฆืขื•ืช wait() , ืื ื• ืžืžืชื™ื ื™ื ืœืฉื—ืจื•ืจ ืžืงื•ื ื‘- Warehouse . ืœืื—ืจ ืฉื”ืžืงื•ื ืคื ื•ื™, ื ื•ืกื™ืฃ ืืช ื”ืคืจื™ื˜, notify() ืžืชื—ื™ืœ ืืช ื”ืฉืจืฉื•ืจ ื•ื”ืœืงื•ื— ื™ื›ื•ืœ ืœืืกื•ืฃ ืืช ื”ืคืจื™ื˜. ืœื”ืœืŸ ื”ืคืœื˜ ืฉืœ ื”ืชื•ื›ื ื™ืช ืฉืœื ื•:
ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 1 ืคืจื™ื˜ ื‘ืžื—ืกืŸ ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 2 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 3 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ. ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 4 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 5 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 6 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืœืงื•ื— ืงื ื” 1 ืคืจื™ื˜... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 5 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 4 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 3 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 2 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 1 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜ ... 0 ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 1 ืคืจื™ื˜ ื‘ืžื—ืกืŸ ื”ื™ืฆืจืŸ ื”ื•ืกื™ืฃ 1 ืคืจื™ื˜ ื ื•ืกืฃ... ื›ืขืช ื™ืฉ 2 ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ื”ืฉื•ืง ... 1 ืœืงื•ื— ืงื ื” ืคืจื™ื˜ 1... ื›ืžื•ืช ืคืจื™ื˜ื™ื ื‘ืžื—ืกืŸ ืžืจืงื˜... 0 ื”ืชื”ืœื™ืš ื”ืกืชื™ื™ื ืขื ืงื•ื“ ื™ืฆื™ืื” 0