import java.util.Date; import java.util.Random; public class SemaSk8r { // Maximum zambonification time (ms) private static final int MAXZAMBONIFICATIONTIME = 3000; // Maximum time between using the Zambony (ms) private static final int MAXBETWEENZAMBONIFICATIONTIME = 10000; // Maximum time between skater creation (ms) private static final int MAXBETWEENNEWSKATERTIME = 10000; // Maximum skate time (ms) public static final int MAXSKATETIME = 15000; // Maximum number of simultaneous skaters private static final int MAXSKATERS = 4; private int sk8rCt = 0; private boolean isZambonying = false; private Random rndGen = new Random(new Date().getTime()); public void go() { Zamboni z = new Zamboni(); new Thread(z, "Zamboni").start(); int i = 0; while (true) { new Thread(new Sk8r(), "S" + i++).start(); try { Thread.sleep(rndGen.nextInt(MAXBETWEENNEWSKATERTIME)); } catch (InterruptedException e) { } } } public static void main(String[] args) { new SemaSk8r().go(); } class Zamboni implements Runnable { @Override public void run() { while (true) { System.out.println("Ready to Zambonify"); System.out.println("Start Zambonifying"); isZambonying = true; areSk8rsOK(); try { // Zambonifying Thread.sleep(rndGen .nextInt(MAXZAMBONIFICATIONTIME)); } catch (InterruptedException e) { } isZambonying = false; System.out.println("Done Zambonifying"); try { Thread.sleep(rndGen .nextInt(MAXBETWEENZAMBONIFICATIONTIME)); } catch (InterruptedException e) { } } } } class Sk8r implements Runnable { @Override public void run() { System.out.println(Thread.currentThread() + ": Ready to skate"); System.out.println(Thread.currentThread() + ": Start skating"); sk8rCt++; areSk8rsOK(); try { // Skating Thread.sleep(rndGen.nextInt(MAXSKATETIME)); } catch (InterruptedException e) { } System.out.println(Thread.currentThread() + ": Done skating"); sk8rCt--; } } public int getNoSk8rs() { return sk8rCt; } public void areSk8rsOK() { if (getNoSk8rs() > MAXSKATERS) { System.err.println("HEADLINE: Overcrowding at rink kills " + getNoSk8rs() + " skaters."); System.exit(1); } if (isZambonying && getNoSk8rs() > 0) { System.err.println("HEADLINE: " + getNoSk8rs() + " skaters killed in grizzly zamboni accident"); System.exit(1); } } }