java 如何获得线程池中正在执行的线程数? 5

 我来答
grace23450
推荐于2016-06-03 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7081
采纳率:77%
帮助的人:2335万
展开全部
java中线程池的监控可以检测到正在执行的线程数。
通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用
taskCount:线程池需要执行的任务数量。
completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。
largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。
getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+ getActiveCount:获取活动的线程数。
通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等。这几个方法在线程池里是空方法。如:
protected void beforeExecute(Thread t, Runnable r) { }
maoyuan55
推荐于2018-02-26 · TA获得超过342个赞
知道小有建树答主
回答量:172
采纳率:100%
帮助的人:149万
展开全部
Map map=Thread.getAllStackTraces();
System.out.println(map.size());
把这两句话放在需要的方法里里,运行就可以得到结果了。
下面这句话是java api的解释:
Thread类。
getAllStackTracespublic static Map<Thread,StackTraceElement[]> getAllStackTraces()返回所有活动线程的堆栈跟踪的一个映射。映射键是线程,而每个映射值都是一个 StackTraceElement 数组,该数组表示相应 Thread 的堆栈转储。返回的堆栈跟踪的格式都是针对 getStackTrace 方法指定的。
在调用该方法的同时,线程可能也在执行。每个线程的堆栈跟踪仅代表一个快照,并且每个堆栈跟踪都可以在不同时间获得。如果虚拟机没有线程的堆栈跟踪信息,则映射值中将返回一个零长度数组。
如果有安全管理器,则通过 RuntimePermission("getStackTrace") 权限和 RuntimePermission("modifyThreadGroup") 权限调用其 checkPermission 方法,查看是否可以获得所有线程的堆栈跟踪。

希望以上信息对你有帮助。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
saintljf
2013-02-22
知道答主
回答量:6
采纳率:0%
帮助的人:5.6万
展开全部
System.out.println(Thread.currentThread().getThreadGroup().activeCount());
这段代码放到任意属于线程池的线程方法里,运行得到结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zdy123yy
2012-11-01 · TA获得超过261个赞
知道答主
回答量:96
采纳率:100%
帮助的人:99.7万
展开全部
使用java代码的话,假如你对线程控制使用的是jdk自带的线程池的话,应该可以知道。其他的方式我就不是很清楚了。
假如你是需要监控java虚拟机线程运行状况的话,建议使用jdk自带的工具jvisualvm,有图形化的监控界面。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尚帝之父
2015-07-29 · TA获得超过199个赞
知道小有建树答主
回答量:151
采纳率:46%
帮助的人:44万
展开全部
Map map=Thread.getAllStackTraces();
System.out.println(map.size());
把这两句话放在需要的方法里里,运行就可以得到结果了。
下面这句话是java api的解释:
Thread类。
getAllStackTracespublic static Map<Thread,StackTraceElement[]> getAllStackTraces()返回所有活动线程的堆栈跟踪的一个映射。映射键是线程,而每个映射值都是一个 StackTraceElement 数组,该数组表示相应 Thread 的堆栈转储。返回的堆栈跟踪的格式都是针对 getStackTrace 方法指定的。
在调用该方法的同时,线程可能也在执行。每个线程的堆栈跟踪仅代表一个快照,并且每个堆栈跟踪都可以在不同时间获得。如果虚拟机没有线程的堆栈跟踪信息,则映射值中将返回一个零长度数组。
如果有安全管理器,则通过 RuntimePermission("getStackTrace") 权限和 RuntimePermission("modifyThreadGroup") 权限调用其 checkPermission 方法,查看是否可以获得所有线程的堆栈跟踪。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式