A generic implementation of pool of references to objects of any kind.
It is thread-safe, so, allows multiple users to get and release objects
"simultaneously". In fact, the standard Java synchronization is used.
The base idea is that, a calling routine will try to get
an object from the pool with method Get. On success, it will use the
object and return it in the pool with the method Put.
If there ares no available objects in the pool, Get will return null.
Then the calling routine should create a new object. Further, scenario goes
in the same way - when finished using the object, calling routine shoud Put
it in the pool for future use, instead of leaving it to be garbage-collected.
The pool initially is empty. The only way to increase the number of objects
managed by the pool, is some external process to Put an object, that was
created, instead of previously Get from the pool.
Pool stores only references to currently "free" or available objects. When
some external routine Gets an object from the pool, its reference is not
locked, it is simply removed from the pool.
Pulls out an object from the pool. The reference to the object is removed
from the pool and their is no longer any kind of relation between this
object and the pool. It can be returned back (released) by Put method.
an object from the pool, if available.
Otherwise, returns null