2 jsecurity jsecurity 于 2014.12.02 17:59 提问

java 多线程,这种情况是否正常。线程总数一直在上升,但是内存没有出现过大的波动

因根据不同的任务需要定时创建线程池,为什么线程总数一直在上升?
![](http://d.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fe0fab898a864034f78f019b2.jpg)

7个回答

arjick
arjick   2014.12.03 13:19
已采纳

线程数一直上升,建议开通jmx,利用远程的工具查看,例如jdk自带的jvisualvm。出现这种情况原因比较多,例如:
1)线程之间资源竞争,导致前面线程池没有释放资源,后面线程阻塞
2)线程出现死循环
3)优先级线程一直占据竞争资源
4)某些方法同步锁或者某些变量同步锁

建议用jvisualvm查看应该关闭的线程堵塞的方法的行数。

eagleyan
eagleyan   Rxr 2014.12.03 00:11

你如何实现的线程池,是使用java的ThreadPoolExecutor 么,还是用 Executors.newFixedThreadPool生成固定大小的线程池。代码贴上来看看,“线程总数一直在上升,但是内存没有出现过大的波动”,你是通过工具看的的么,你用jstack看到线程有很多么?

u012627049
u012627049   2014.12.03 15:41

线程数一直上升,说明你的线程池没有释放资源

u012627049
u012627049   2014.12.03 15:41

线程数一直上升,说明你的线程池没有释放资源

u012627049
u012627049   2014.12.03 15:41

线程数一直上升,说明你的线程池没有释放资源

u012627049
u012627049   2014.12.03 15:41

线程数一直上升,说明你的线程池没有释放资源

u012627049
u012627049   2014.12.03 15:41

线程数一直上升,说明你的线程池没有释放资源

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!