diff --git a/object-pool/src/main/java/com/iluwatar/App.java b/object-pool/src/main/java/com/iluwatar/App.java index 5c0007cfd..1ad35a147 100644 --- a/object-pool/src/main/java/com/iluwatar/App.java +++ b/object-pool/src/main/java/com/iluwatar/App.java @@ -3,5 +3,25 @@ package com.iluwatar; public class App { public static void main( String[] args ) { + OliphauntPool pool = new OliphauntPool(); + System.out.println(pool); + Oliphaunt oliphaunt1 = pool.checkOut(); + System.out.println("Checked out " + oliphaunt1); + System.out.println(pool); + Oliphaunt oliphaunt2 = pool.checkOut(); + System.out.println("Checked out " + oliphaunt2); + Oliphaunt oliphaunt3 = pool.checkOut(); + System.out.println("Checked out " + oliphaunt3); + System.out.println(pool); + System.out.println("Checking in " + oliphaunt1); + pool.checkIn(oliphaunt1); + System.out.println("Checking in " + oliphaunt2); + pool.checkIn(oliphaunt2); + System.out.println(pool); + Oliphaunt oliphaunt4 = pool.checkOut(); + System.out.println("Checked out " + oliphaunt4); + Oliphaunt oliphaunt5 = pool.checkOut(); + System.out.println("Checked out " + oliphaunt5); + System.out.println(pool); } } diff --git a/object-pool/src/main/java/com/iluwatar/ObjectPool.java b/object-pool/src/main/java/com/iluwatar/ObjectPool.java index 23bb16a6a..3f9d6f3aa 100644 --- a/object-pool/src/main/java/com/iluwatar/ObjectPool.java +++ b/object-pool/src/main/java/com/iluwatar/ObjectPool.java @@ -1,14 +1,31 @@ package com.iluwatar; +import java.util.HashSet; + public abstract class ObjectPool { + HashSet available = new HashSet<>(); + HashSet inUse = new HashSet<>(); + protected abstract T create(); public synchronized T checkOut() { - return null; + if (available.size() <= 0) { + available.add(create()); + } + T instance = available.iterator().next(); + available.remove(instance); + inUse.add(instance); + return instance; } public synchronized void checkIn(T instance) { - + inUse.remove(instance); + available.add(instance); + } + + @Override + public String toString() { + return String.format("Pool available=%d inUse=%d", available.size(), inUse.size()); } } diff --git a/object-pool/src/main/java/com/iluwatar/Oliphaunt.java b/object-pool/src/main/java/com/iluwatar/Oliphaunt.java index 61e926b57..928168dfe 100644 --- a/object-pool/src/main/java/com/iluwatar/Oliphaunt.java +++ b/object-pool/src/main/java/com/iluwatar/Oliphaunt.java @@ -1,5 +1,21 @@ package com.iluwatar; public class Oliphaunt { - + + private static int counter = 1; + + private final int id; + + public Oliphaunt() { + id = counter++; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return String.format("Oliphaunt id=%d", id); + } }