import java.applet.Applet; import java.awt.*; public class Poets extends Applet { public void init() { TextArea display = new TextArea("", 10, 30, TextArea.SCROLLBARS_VERTICAL_ONLY); add(display); ScreenController screen = new ScreenController(); Nursery nursery = new Nursery(display, screen); Revolutionary revolutionary = new Revolutionary(display, screen); Mowing mowing = new Mowing(display, screen); nursery.start(); revolutionary.start(); mowing.start(); } } class ScreenController { private boolean inUse = false; public synchronized void askFor() { while (inUse) try { wait(); } catch(InterruptedException e) { System.err.println("Exception"); } inUse = true; } public synchronized void relinquish() { inUse = false; notify(); } } class Mowing extends Thread { private TextArea display; private ScreenController screen; public Mowing(TextArea display, ScreenController screen) { this.display = display; this.screen = screen; } public void run() { while (true) { screen.askFor(); display.append("one man went to mow\n"); display.append("went to mow a meadow\n\n"); screen.relinquish(); try { Thread.sleep(5000); } catch (InterruptedException e) { display.append ("sleep exception - design fault\n"); } } } } class Nursery extends Thread { private TextArea display; private ScreenController screen; public Nursery(TextArea display, ScreenController screen) { this.display = display; this.screen = screen; } public void run() { while (true) { screen.askFor(); display.append("Mary had a little lamb\n"); display.append("Its fleece was white as snow\n\n"); screen.relinquish(); try { Thread.sleep(5000); } catch (InterruptedException e) { display.append ("sleep exception - design fault\n"); } } } } class Revolutionary extends Thread { private TextArea display; private ScreenController screen; public Revolutionary(TextArea display, ScreenController screen) { this.display = display; this.screen = screen; } public void run() { while (true) { screen.askFor(); display.append("Praise Marx\n"); display.append("and pass the ammunition\n\n"); screen.relinquish(); try { Thread.sleep(5000); } catch (InterruptedException e) { display.append ("sleep exception - design fault\n"); } } } }