diff --git a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/BlockingQueueUsage.java b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/BlockingQueueUsage.java new file mode 100644 index 0000000000..63c6cc4460 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/BlockingQueueUsage.java @@ -0,0 +1,24 @@ +package com.baeldung.concurrent.blockingqueue; + + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +public class BlockingQueueUsage { + public static void main(String[] args) { + int BOUND = 10; + int N_PRODUCERS = 4; + int N_CONSUMERS = Runtime.getRuntime().availableProcessors(); + + + BlockingQueue queue = new LinkedBlockingQueue<>(BOUND); + + for (int i = 0; i < N_PRODUCERS; i++) { + new Thread(new NumbersProducer(queue)).start(); + } + + for (int j = 0; j < N_CONSUMERS; j++) { + new Thread(new NumbersConsumer(queue)).start(); + } + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java new file mode 100644 index 0000000000..110a801acc --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java @@ -0,0 +1,25 @@ +package com.baeldung.concurrent.blockingqueue; + + +import java.util.concurrent.BlockingQueue; + +class NumbersConsumer implements Runnable { + private final BlockingQueue queue; + + public NumbersConsumer(BlockingQueue queue) { + this.queue = queue; + } + + public void run() { + try { + while (true) { + Integer number = queue.take(); + String result = number.toString(); + System.out.println(Thread.currentThread().getName() + " result: " + result); + + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java new file mode 100644 index 0000000000..c9e91cd077 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java @@ -0,0 +1,31 @@ +package com.baeldung.concurrent.blockingqueue; + + +import java.util.Random; +import java.util.concurrent.BlockingQueue; + + +class NumbersProducer implements Runnable { + private final Random random = new Random(); + private final BlockingQueue numbersQueue; + + + public NumbersProducer(BlockingQueue numbersQueue) { + this.numbersQueue = numbersQueue; + } + + + public void run() { + try { + generateNumbers(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + private void generateNumbers() throws InterruptedException { + for (int i = 0; i < 100; i++) { + numbersQueue.put(random.nextInt(100)); + } + } +} \ No newline at end of file