September 2019
Intermediate to advanced
816 pages
18h 47m
English
Since the producers (checkers) don't work at the same time with the consumers (packers), we can just simulate their work via a for that adds 100 checked bulbs in a queue:
private static final BlockingQueue<String> queue = new LinkedBlockingQueue<>();...private static void simulatingProducers() { for (int i = 0; i < MAX_PROD_BULBS; i++) { queue.offer("bulb-" + rnd.nextInt(1000)); }}
Now, the consumers must pack each bulb and return it. This means that the Consumer is a Callable:
private static class Consumer implements Callable { @Override public String call() throws InterruptedException { String bulb = queue.poll(); Thread.sleep(100); if (bulb != null) { logger.info(() -> "Packed: " + bulb + " by consumer: ...