/** * Fail TootjadTarbijad.java * @author Jaanus Poial * @version 0.3 kevad 99 */ //====================================================== // Klassikaline tootja-tarbija u"lesanne //====================================================== import java.util.*; public class TootjadTarbijad { static final int PUHVRIPIKKUS = 6; static Vector yhispuhver = new Vector (PUHVRIPIKKUS); public static void main (String[] parameetrid) { int tootja1_tiks = 5000; //millisekundit int tootja2_tiks = 7000; //millisekundit int tarbija1_tiks = 3000; //millisekundit Tootja tootja1 = new Tootja (yhispuhver, tootja1_tiks, "Pro1"); Tootja tootja2 = new Tootja (yhispuhver, tootja2_tiks, "Pro2"); Tarbija tarbija1 = new Tarbija (yhispuhver, tarbija1_tiks, "Con1"); System.out.println ("Puhvri suurus: " + yhispuhver.capacity()); tootja1.start(); tootja2.start(); tarbija1.start(); } // main lopp } // TootjadTarbijad lopp class Tootja extends Thread { Vector puhver; int tiks; String nimi; Tootja (Vector v, int i, String s) { puhver = v; tiks = i; nimi = s; } public void run() { try { while (true) { //lopmatu tsykkel tooda(); //iga tiksuga toodab uue asja sleep (tiks); } } catch (InterruptedException e) { } } private void tooda() throws InterruptedException { synchronized (puhver) { while (puhver.size() >= puhver.capacity()) { puhver.wait(); //puhver on ta"is, oota } puhver.addElement ("(" + nimi + " > " + new Date().toString() + ")"); //ajatempel System.out.println (nimi + " > " + puhver.lastElement() + " " + tiks + " " + puhver.size()); puhver.notifyAll(); } // kriitilise sektsiooni lopp } } // Tootja lopp class Tarbija extends Thread { Vector puhver; int tiks; String nimi; Tarbija (Vector v, int i, String s) { puhver = v; tiks = i; nimi = s; } public void run() { try { while (true) { //lopmatu tsykkel tarbi(); //iga tiksuga tarbib u"he asja sleep (tiks); } } catch (InterruptedException e) { } } private void tarbi() throws InterruptedException { synchronized (puhver) { while (puhver.size() <= 0) { puhver.wait(); //oota, kuni midagi tekib } String teade = (String)puhver.firstElement(); System.out.println (nimi + " < " + teade + " " + tiks); puhver.removeElementAt (0); puhver.notifyAll(); } // kriitilise sektsiooni lopp } } // Tarbija lopp //==================== // faili lopp //====================