import java.io.*; class Queue { private int [] que; private int nextIn, nextOut, filled, queSize; public Queue(int size) { que = new int [size]; filled = 0; nextIn = 1; nextOut = 1; queSize = size; } // konec konstruktoru public synchronized void deposit (int item) { try { while (filled == queSize) wait(); que [nextIn] = item; nextIn = (nextIn % queSize) + 1; filled++; notify(); } //konec try catch (InterruptedException e) { System.out.println("int.depos"); } } //konec deposit public synchronized int fetch() { int item = 0; try { while (filled == 0) wait(); item = que [nextOut]; nextOut = (nextOut % queSize) + 1; filled--; notify(); } //konec try catch(InterruptedException e) { System.out.println("int.fetch"); } return item; } //konec fetch } //konec tridy Queue class Producer extends Thread { private Queue buffer; public Producer(Queue que) { buffer = que; } public void run() { int new_item = 0; // neprelozi bez inicializace opakuj: while (new_item > -1) { /*ukoncime-1 nebo zapornym cislem*/ try {//produkce byte[] vstupniBuffer = new byte[20]; System.in.read(vstupniBuffer); String s = new String(vstupniBuffer).trim(); new_item = Integer.valueOf(s).intValue(); } catch (NumberFormatException e) { System.out.println("nebylo to dobre"); continue opakuj; } catch (IOException e) {//zachytava nepripr.klavesnici System.out.println("chyba cteni"); } buffer.deposit(new_item); } } } class Consumer extends Thread { private Queue buffer; public Consumer(Queue que) { buffer = que; } public void run() { int stored_item = 0; //chce inicializaci while (stored_item > -1) {/*ukoncime -1 nebo minus cislem*/ stored_item = buffer.fetch(); System.out.println(stored_item); //konzumace } } } public class P_C { public static void main(String [] args) { Queue buff1 = new Queue(100); Producer producer1 = new Producer(buff1); Consumer consumer1 = new Consumer(buff1); producer1.start(); consumer1.start(); } }