The producer–consumer problem (also known as the bounded-buffer problem) is a classic example of a multi-process synchronization problem in a producer consumer mode.
The problem describes two processes who share a common, fixed-size a queue used as buffer.
where:
The problem is to make sure that the producer won't try to add data into the buffer if it's full and that the consumer won't try to remove data from an empty buffer.
The solution can be reached by means of inter-process communication.
See gerardnico/java-demo/blob/master/src/Concurrency/ProducerConsumerWithBlockingQueue.java that use a Java Concurrency - (Queue|Stack)
An inadequate solution could result in a deadlock where both processes are waiting to be awakened.
The producer / consumer problem with a semaphore. See wiki/Semaphore_(programming)