Dies ist eine alte Version des Dokuments!


Thread, wait() und notify()

Das Beispiel zeigt einen MasterThread, welcher einen ChildThread startet und sich dann „schlafen legt“ um anschließend von seinem eigenen ChildThread nach Fertigstellung des Selbigen wieder geweckt wird:

package com.sowas.javawiki.waitnotify;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class MasterThread extends Thread {
   private static ExecutorService service = Executors.newCachedThreadPool();
 
   @Override
   public void run() {
      System.out.println("MasterThread startet");
      synchronized(this) {
         service.execute(new ChildThread(this));
         try {
            wait();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
      System.out.println("MasterThread endet");
   }
 
   public static void main(String[] args) {
      service.execute(new MasterThread());
   }
}
public class ChildThread implements Runnable {
   private MasterThread masterThread;
 
   ChildThread(MasterThread masterThread) {
      this.masterThread = masterThread;
   }
 
   @Override
   public void run() {
      try {
         System.out.println("ChildThread startet");
         // hier läuft der ChildThread...
         System.out.println("ChildThread endet");
      } finally {
         // Masterthread informieren, dass ChildThread fertig ist:
         synchronized (masterThread) {
            masterThread.notify();
         }
      }
   }
}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007