在his famous concurrency book中,Goetz建议可以使用
计算池中的最佳线程数N threads = N CPU * U CPU * (1 + W/C)
W/C
是等待计算比率。我想开发一个自定义Executor
,它将使用ThreadPoolExecutor.setCorePoolSize()
调整工作线程数量,但我不知道如何计算WC比率。假设我的应用程序使用的唯一ThreadPool
如何计算该比率?
有没有办法跟踪工作线程在等待/睡眠上花费的时间? 或者有没有解决这个问题的实现?
答案 0 :(得分:1)
http://docs.oracle.com/javase/7/docs/api/java/lang/management/ThreadInfo.html
此类包含
等方法 getBlockedCount()
返回与此ThreadInfo关联的线程被阻止进入或重新输入监视器的总次数。
getBlockedTime()
返回自启用线程争用监视以来,与此ThreadInfo关联的线程被阻止进入或重新进入监视器的大致累计经过时间(以毫秒为单位)。