BlockingQueue

 

BlockingQueue is a thread-safe queue that supports operations that wait for the queue

to become non-empty when retrieving an element and wait for space to become available

in the queue when storing an element.


class Producer implements Runnable {
   
private BlockingQueue<String> queue;

   
public Producer(BlockingQueue<String> queue) {
       
this.queue = queue;
    }

   
@Override
    public void
run() {
       
String[] messages = {
               
"First message",
               
"Second message",
               
"Third message",
               
"Fourth message",
               
"End"
       
};

       
try {
           
for (String message : messages) {
               
queue.put(message);
               
System.out.println("Produced: " + message);
               
Thread.sleep(500);
            }
        }
catch (InterruptedException e) {
           
Thread.currentThread().interrupt();
           
System.out.println("Thread interrupted");
        }
    }
}

class Consumer implements Runnable {
   
private BlockingQueue<String> queue;

   
public Consumer(BlockingQueue<String> queue) {
       
this.queue = queue;
    }

   
@Override
    public void
run() {
       
try {
           
String message;
           
while (!"End".equals(message = queue.take())) {
               
System.out.println("Consumed: " + message);
               
Thread.sleep(1000);
            }
        }
catch (InterruptedException e) {
           
Thread.currentThread().interrupt();
           
System.out.println("Thread interrupted");
        }
    }
}

public class BlockingQueue2 {
   
public static void main(String[] args) {
       
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
       
Thread producer = new Thread(new Producer(queue));
       
Thread consumer = new Thread(new Consumer(queue));

       
producer.start();
       
consumer.start();
    }
}

 

C:\java\jdk22\bin\java.exe

Produced: First message

Consumed: First message

Produced: Second message

Consumed: Second message

Produced: Third message

Produced: Fourth message

Consumed: Third message

Produced: End

Consumed: Fourth message