From bff34cfd2175a14c0931602b16dba589f1880273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= <iluwatar@gmail.com> Date: Sun, 24 May 2015 21:47:57 +0300 Subject: [PATCH] Finished example. --- .../src/main/java/com/iluwatar/App.java | 20 ++++++++++++++++++ .../main/java/com/iluwatar/ObjectPool.java | 21 +++++++++++++++++-- .../src/main/java/com/iluwatar/Oliphaunt.java | 18 +++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) 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<T> { + HashSet<T> available = new HashSet<>(); + HashSet<T> 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); + } }