Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.96 KB | None | 0 0
  1. public class ProducerConsumer {
  2.  
  3.     class Producer {
  4.         final Lagerhalle lagerhalle;
  5.  
  6.         Producer(final Lagerhalle lagerhalle) {
  7.             this.lagerhalle = lagerhalle;
  8.         }
  9.  
  10.         void produce() {
  11.             int tmp = 0;
  12.             while (!Thread.interrupted()) {
  13.                 try {
  14.                     lagerhalle.add(tmp++);
  15.                     System.out.println("produced " + tmp);
  16.                 } catch (InterruptedException e) {
  17.                     e.printStackTrace();
  18.                 }
  19.             }
  20.         }
  21.     }
  22.  
  23.     class Consumer {
  24.         final Lagerhalle lagerhalle;
  25.  
  26.         Consumer(final Lagerhalle lagerhalle) {
  27.             this.lagerhalle = lagerhalle;
  28.         }
  29.  
  30.         void consume() {
  31.             while (!Thread.interrupted()) {
  32.                 try {
  33.                     int tmp = lagerhalle.get();
  34.                     System.out.println("consumed " + tmp);
  35.                 } catch (InterruptedException e) {
  36.                     e.printStackTrace();
  37.                 }
  38.             }
  39.         }
  40.     }
  41.  
  42.     class Lagerhalle {
  43.         private int[] elements = new int[10];
  44.         private int used = 0;
  45.  
  46.         synchronized void add(int element) throws InterruptedException {
  47.             while (used == elements.length - 1) {
  48.                 wait();
  49.             }
  50.             elements[used++] = element;
  51.             notifyAll();
  52.         }
  53.  
  54.         synchronized int get() throws InterruptedException {
  55.             while (used == 0) {
  56.                 wait();
  57.             }
  58.             int tmp = elements[used-- - 1];
  59.             notifyAll();
  60.             return tmp;
  61.         }
  62.     }
  63.  
  64.     void start() {
  65.         var lh = new Lagerhalle();
  66.         new Thread(() -> new Producer(lh).produce()).start();
  67.         new Thread(() -> new Consumer(lh).consume()).start();
  68.     }
  69.  
  70.     public static void main(String... args) {
  71.         var pc = new ProducerConsumer();
  72.         pc.start();
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement