import java.util.concurrent.Semaphore; public class Bufor { private int size = 40; private String[] data = new String[size]; private int in; private int out; private int counter; private int endCount; private boolean end = false; static Semaphore elementy = new Semaphore(0); static Semaphore miejsca = new Semaphore(400); Bufor(int _end, Semaphore e, Semaphore m) { this.in = 0; this.out = 0; this.counter = 0; this.endCount = _end; this.elementy = e; this.miejsca = m; } public String get() { elementy.acquireUninterruptibly(); if(counter >= endCount) { this.end = true; return "-1"; } String temp = this.data[out]; this.out = (this.out + 1) % size; miejsca.release(); counter++; if(counter >= endCount) { this.end = true; } return temp; } public void add(String _data) { miejsca.acquireUninterruptibly(); data[in] = _data; in = (in + 1) % size; elementy.release(); } public synchronized boolean check(){ if(this.end){ return true; } return false; } }