如果我在启用了异步空闲对象驱逐的应用程序中使用多个GenericKeyedObjectPool
,那么有多少“空闲对象驱逐”线程将在后台运行?
多个GenericKeyedObjectPool
只创建一个逐出线程,还是为每个池创建单独的线程?
答案 0 :(得分:0)
The current implementation (v1.6) uses a static timer,所以实际上多个池只使用一个驱逐线程。 (Assuming that they are loaded into the same classloader。)您可以使用jstack
进行检查,只有一个计时器线程:
"Timer-0" daemon prio=10 tid=0x7bce5000 nid=0x1ca5 in Object.wait() [0x7b23d000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0xa26c0fe8> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Timer.java:509)
- locked <0xa26c0fe8> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)
Locked ownable synchronizers:
- None