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(); } } } }