CCCPaste

Untitled


import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Fabrika {
    int max_capacity = 5;
    List products = new ArrayList<>();
    static Semaphore main_semaphore = new Semaphore(1);
    static Semaphore producer_semaphore = new Semaphore(    10);
    static Semaphore consume_semaphore = new Semaphore(10);
    public Fabrika(int capacity) {
        max_capacity = capacity;
    }
    public void produce(String s) throws InterruptedException{
        producer_semaphore.acquire();
        main_semaphore.acquire();
        while(products.size() == max_capacity) {
            main_semaphore.release();
            Thread.sleep(2000);
            main_semaphore.acquire();
        }
        products.add(s);
        System.out.println("Produced " + s);
        main_semaphore.release();
        consume_semaphore.release();

    }
    public void consume() throws InterruptedException {
        consume_semaphore.acquire();
        main_semaphore.acquire();
        while(products.size() == 0) {
            main_semaphore.release();
            Thread.sleep(2000);
            main_semaphore.acquire();
        }
        String s = products.remove(0);
        System.out.println("Consumed " + s);
        main_semaphore.release();
        producer_semaphore.release();
    }

}