diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java index 80806e9eb..b8d6a41a0 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java +++ b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java @@ -2,6 +2,7 @@ package com.iluwatar.doublechecked.locking; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** * @@ -26,13 +27,17 @@ public class App { final Inventory inventory = new Inventory(1000); ExecutorService executorService = Executors.newFixedThreadPool(3); for (int i = 0; i < 3; i++) { - executorService.execute(new Runnable() { - @Override - public void run() { - while (inventory.addItem(new Item())) - ; - } - }); + executorService.execute(() -> { + while (inventory.addItem(new Item())) + ; + }); + } + + executorService.shutdown(); + try { + executorService.awaitTermination(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); } } } diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java index 9f663f272..a58926d9d 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java +++ b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java @@ -12,13 +12,14 @@ import java.util.concurrent.locks.ReentrantLock; */ public class Inventory { - private int inventorySize; - private List items; - private Lock lock = new ReentrantLock(); + private final int inventorySize; + private final List items; + private final Lock lock; public Inventory(int inventorySize) { this.inventorySize = inventorySize; - this.items = new ArrayList(inventorySize); + this.items = new ArrayList<>(inventorySize); + this.lock = new ReentrantLock(); } public boolean addItem(Item item) { @@ -27,7 +28,9 @@ public class Inventory { try { if (items.size() < inventorySize) { items.add(item); - System.out.println(Thread.currentThread()); + System.out.println(Thread.currentThread() + + ": items.size()=" + items.size() + + ", inventorySize=" + inventorySize); return true; } } finally {