浏览 1629 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-29
最后修改:2009-12-30
最近项目中用到hibernate搭配ehcache做二级缓存。部署到weblogic,如果weblogic不挺下来。直接在weblogic console 中stop-->update-->start 做重新部署操作。用jconsole观察到Thread数量会随部署次数稳定增长。
研究了下ehcache。ehcache如果缓存到硬盘。对应每个table,ehcache都会起一对线程来维护这些table cache。一对如下线程: private final class SpoolAndExpiryThread extends Thread {
public SpoolAndExpiryThread() {
super("Store " + name + " Spool Thread");
setDaemon(true);
setPriority(Thread.NORM_PRIORITY);
spoolAndExpiryThreadActive = true;
}
/**
* RemoteDebugger thread method.
*/
@Override
public final void run() {
spoolAndExpiryThreadMain();
}
}
这些线程都设置为后台线程 setDeamon(true);
这些后台线程只有在把weblogic关了之后才会停下来,所以weblogic不重启,直接update war 然后start。ehcache会重新 new 很多新的线程。
这个问题不知道有什么解法
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-30
最后修改:2009-12-30
那你把SpoolAndExpiryThread重写一下不就可以了吗?把setDeamon(true);去掉,不过我不清楚这样会对ehcache什么样的后果。
刚才又看了下setDeamon,这样还是不行的,还是需要改启动SpoolAndExpiryThread线程的地方,如果SpoolAndExpiryThread isAlive()就不启动新的了。 |
|
返回顶楼 | |