package waitnotify;

/**
 * @author ssb
 */
public class CoordinatedCountdownDemo {

	/**
	 * @param args
	 */
	public static void main ( String[] args ) {

		CountdownMaster master = new CountdownMaster();
		Thread masterthread = new Thread(master);
		masterthread.start();

		Thread[] threads = new Thread[5];
		String indent = "";
		for ( int ctr = 0 ; ctr < threads.length ; ctr++, indent += " " ) {
			threads[ctr] = new Thread(new CoordinatedCountdown(23,indent,master));
			threads[ctr].start();
		}

		for ( int ctr = 0 ; ctr < threads.length ; ctr++ ) {
			System.out
			    .println("waiting for " + threads[ctr].getName() + " to finish");
			for ( ; threads[ctr].isAlive() ; ) {
				try {
					threads[ctr].join();
				} catch ( InterruptedException e ) {}
			}
		}

		master.shutdown();
		masterthread.interrupt();
		System.out.println("waiting for " + masterthread.getName() + " to finish");
		for ( ; masterthread.isAlive() ; ) {
			try {
				masterthread.join();
			} catch ( InterruptedException e ) {}
		}

		System.out.println("all threads done");

	}

}
