File tree 4 files changed +41
-2
lines changed
object-pool/src/main/java/com/iluwatar
4 files changed +41
-2
lines changed Original file line number Diff line number Diff line change 1
1
package com .iluwatar ;
2
2
3
+ /**
4
+ *
5
+ * When it is necessary to work with a large number of objects that are particularly expensive to instantiate
6
+ * and each object is only needed for a short period of time, the performance of an entire application may be
7
+ * adversely affected. An object pool design pattern may be deemed desirable in cases such as these.
8
+ *
9
+ * The object pool design pattern creates a set of objects that may be reused. When a new object is needed, it
10
+ * is requested from the pool. If a previously prepared object is available it is returned immediately, avoiding
11
+ * the instantiation cost. If no objects are present in the pool, a new item is created and returned. When the
12
+ * object has been used and is no longer needed, it is returned to the pool, allowing it to be used again in the
13
+ * future without repeating the computationally expensive instantiation process. It is important to note that
14
+ * once an object has been used and returned, existing references will become invalid.
15
+ *
16
+ * In this example we have created OliphauntPool inheriting from generic ObjectPool. Oliphaunts can be checked
17
+ * out from the pool and later returned to it. The pool tracks created instances and their status (available,
18
+ * inUse).
19
+ *
20
+ */
3
21
public class App {
4
22
5
23
public static void main ( String [] args ) {
Original file line number Diff line number Diff line change 2
2
3
3
import java .util .HashSet ;
4
4
5
+ /**
6
+ *
7
+ * Generic object pool
8
+ *
9
+ * @param <T>
10
+ */
5
11
public abstract class ObjectPool <T > {
6
12
7
- HashSet <T > available = new HashSet <>();
8
- HashSet <T > inUse = new HashSet <>();
13
+ private HashSet <T > available = new HashSet <>();
14
+ private HashSet <T > inUse = new HashSet <>();
9
15
10
16
protected abstract T create ();
11
17
Original file line number Diff line number Diff line change 1
1
package com .iluwatar ;
2
2
3
+ /**
4
+ *
5
+ * Oliphaunts are expensive to create
6
+ *
7
+ */
3
8
public class Oliphaunt {
4
9
5
10
private static int counter = 1 ;
@@ -8,6 +13,11 @@ public class Oliphaunt {
8
13
9
14
public Oliphaunt () {
10
15
id = counter ++;
16
+ try {
17
+ Thread .sleep (1000 );
18
+ } catch (InterruptedException e ) {
19
+ e .printStackTrace ();
20
+ }
11
21
}
12
22
13
23
public int getId () {
Original file line number Diff line number Diff line change 1
1
package com .iluwatar ;
2
2
3
+ /**
4
+ *
5
+ * Oliphaunt object pool
6
+ *
7
+ */
3
8
public class OliphauntPool extends ObjectPool <Oliphaunt > {
4
9
5
10
@ Override
You can’t perform that action at this time.
0 commit comments