import java.util.Queue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class Producer extends Thread{ ReentrantLock lock; Condition con; Queue queue; int size; public Producer(ReentrantLock lock, Condition con, Queue queue, int size) { this.lock = lock; this.con = con; this.queue = queue; this.size = size; } @Override public void run() { for (int i = 0; i < 10; i++) { lock.lock(); while (queue.size() == size) { try { con.await(); } catch (InterruptedException ex) { ex.printStackTrace(); } } queue.add(i); System.out.println("Produced : " + i + " queue size: " + queue.size()); con.signal(); lock.unlock(); } } }