Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ProducerConsumer {
- class Producer {
- final Lagerhalle lagerhalle;
- Producer(final Lagerhalle lagerhalle) {
- this.lagerhalle = lagerhalle;
- }
- void produce() {
- int tmp = 0;
- while (!Thread.interrupted()) {
- try {
- lagerhalle.add(tmp++);
- System.out.println("produced " + tmp);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- class Consumer {
- final Lagerhalle lagerhalle;
- Consumer(final Lagerhalle lagerhalle) {
- this.lagerhalle = lagerhalle;
- }
- void consume() {
- while (!Thread.interrupted()) {
- try {
- int tmp = lagerhalle.get();
- System.out.println("consumed " + tmp);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- class Lagerhalle {
- private int[] elements = new int[10];
- private int used = 0;
- synchronized void add(int element) throws InterruptedException {
- while (used == elements.length - 1) {
- wait();
- }
- elements[used++] = element;
- notifyAll();
- }
- synchronized int get() throws InterruptedException {
- while (used == 0) {
- wait();
- }
- int tmp = elements[used-- - 1];
- notifyAll();
- return tmp;
- }
- }
- void start() {
- var lh = new Lagerhalle();
- new Thread(() -> new Producer(lh).produce()).start();
- new Thread(() -> new Consumer(lh).consume()).start();
- }
- public static void main(String... args) {
- var pc = new ProducerConsumer();
- pc.start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement