Changed reset -> onReturn, added onTake - methods that can be used to define actions when an object is taken-from/returned-to the pool
This commit is contained in:
parent
b599206867
commit
e1786ca348
|
@ -23,7 +23,15 @@ abstract class PoolableObject<T> {
|
|||
*/
|
||||
@SuppressWarnings("UnusedParameters")
|
||||
public
|
||||
void reset(T object) {
|
||||
void onReturn(T object) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an object is taken from the pool, useful for setting an objects state, for example.
|
||||
*/
|
||||
@SuppressWarnings("UnusedParameters")
|
||||
public
|
||||
void onTake(T object) {
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class SafeObjectPool<T> implements ObjectPool<T> {
|
|||
|
||||
for (int x = 0; x < size; x++) {
|
||||
T e = poolableObject.create();
|
||||
poolableObject.reset(e);
|
||||
poolableObject.onReturn(e);
|
||||
this.queue.add(e);
|
||||
}
|
||||
}
|
||||
|
@ -44,11 +44,14 @@ class SafeObjectPool<T> implements ObjectPool<T> {
|
|||
return this.queue.take();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"Duplicates", "SpellCheckingInspection"})
|
||||
@Override
|
||||
public
|
||||
T takeUninterruptibly() {
|
||||
try {
|
||||
return take();
|
||||
T take = take();
|
||||
poolableObject.onTake(take);
|
||||
return take;
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
}
|
||||
|
@ -57,7 +60,7 @@ class SafeObjectPool<T> implements ObjectPool<T> {
|
|||
@Override
|
||||
public
|
||||
void release(T object) {
|
||||
poolableObject.reset(object);
|
||||
poolableObject.onReturn(object);
|
||||
this.queue.offer(object);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class UnsafeObjectPool<T> implements ObjectPool<T> {
|
|||
|
||||
for (int x = 0; x < newSize; x++) {
|
||||
T e = poolableObject.create();
|
||||
poolableObject.reset(e);
|
||||
poolableObject.onReturn(e);
|
||||
objects.offer(e);
|
||||
}
|
||||
}
|
||||
|
@ -63,14 +63,18 @@ class UnsafeObjectPool<T> implements ObjectPool<T> {
|
|||
}
|
||||
}
|
||||
|
||||
poolableObject.onTake(poll);
|
||||
return poll;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"Duplicates", "SpellCheckingInspection"})
|
||||
@Override
|
||||
public
|
||||
T takeUninterruptibly() {
|
||||
try {
|
||||
return take();
|
||||
final T take = take();
|
||||
poolableObject.onTake(take);
|
||||
return take;
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
}
|
||||
|
@ -79,7 +83,7 @@ class UnsafeObjectPool<T> implements ObjectPool<T> {
|
|||
@Override
|
||||
public
|
||||
void release(T object) {
|
||||
poolableObject.reset(object);
|
||||
poolableObject.onReturn(object);
|
||||
boolean waiting = objects.peek() == null;
|
||||
|
||||
// This could potentially happen due to optimistic calculations by the implementation queue.
|
||||
|
|
Loading…
Reference in New Issue