@xetorthio @marcosnils  After I have run benchmark/PoolBenchmark.java, I realized there's an error on my implementation to use "synchronized".

getResource() can wait for objects to return by returnObject() if there're no available object in Pool.
But returnObject() will be blocked if borrowObject() is waiting for returnObject() to return resource, DEADLOCK occurred.

Sorry for my poor implementation!

I have reimplemented Pool's thread-safe feature by using ReentrantReadWriteLock, and it works!
And performance is nearly same to non thread-safe version.

running Benchmark (PoolBenchmark.java)
master (no synchronized) : 10671 ops
apply ReentrantReadWriteLock : 10735 ops

I don't believe newer implementation is faster than older implementation, but it means that we don't need to worry about performance.

I'll test a bit more before making new PR to this issue.
Then we could think about new PR.

Sorry again for not testing hardly!