Under most circumstances, an application will have one or two object pools, so
creating a new Evictor thread for each object is fine.
However, in the case of DBCP's PerUserDataSource class, this design is
unacceptable as it creates a thread for every distinct user that uses the data
source. In my case, our system has several thousand concurrent users, and as a
result, the system was attempting to create several thousand Evictor threads.
We fixed this by changing the Evictor from a Thread to a TimerTask which is
scheduled with the Timer class.
Patch for GenericObjectPool.java