/** Voorbeeld van een toepassing met twee parallelle * levensdraden. * De wandelaar begint in positie 0. Twee onafhankelijke * levensdraden proberen hem in verschillende richtingen * te trekken. Elke levensdraad wacht gedurende een * willekeurig aantal milliseconden (uniform verdeeld * tussen 0 en 1000 milliseconden) voor hij zijn slag * slaat. * Het programma stopt kort nadat de wandelaar meer * dan 10 eenheden van zijn beginpositie afgeweken is. * @author Lieven Smits * @version 1.0 25/7/2000 */ public class DronkenWandelaar extends Thread { /** De huidige plaats van de wandelaar. */ static int positie = 0; /** De richting waarin een levensdraad de wandelaar * probeert te duwen (1 of -1). */ int bijdrage; /** Construeer een kracht die op de wandelaar * uitgeoefend wordt. * @param bijdrage * de richting waarin de kracht duwt (1 of -1). */ DronkenWandelaar(int bijdrage) { this.bijdrage = bijdrage; } /** Animatielus. Een kracht slaapt gedurende een * willekeurige tijd (uniform verdeeld van 0 tot * 1000 milliseconden). Vervolgens verplaatst * ze de wandelaar in de gewenste richting. */ public void run() { try { // oneindige lus while (true) { int slaaptijd = (int)(Math.random() * 1000); sleep(slaaptijd); System.out.println("positie = " + (positie += bijdrage)); if (positie > 10 || positie < -10) System.exit(0); // het hele programma afbreken } } catch (InterruptedException e) { System.out.println("wandelaar " + bijdrage + ": stopt"); return; } } /** Construeer en activeer twee tegenstrijdige * krachten die op de wandelaar inwerken. */ public static void main(String[] args) { DronkenWandelaar d1 = new DronkenWandelaar(1); DronkenWandelaar d2 = new DronkenWandelaar(-1); d1.start(); d2.start(); } }