优化线程池大小

vac*_*ach 7 java concurrency optimization

着名的并发书中,Goetz建议使用可以计算池中最佳线程数

N threads = N CPU * U CPU * (1 + W/C)
Run Code Online (Sandbox Code Playgroud)

W/C是等待计算比率.我想开发一个Executor用于调整工作线程数量的自定义ThreadPoolExecutor.setCorePoolSize(),但我不知道如何计算WC比率.假设这ThreadPool是我的应用程序使用的唯一一个如何计算该比率?

有没有办法跟踪工作线程在等待/睡眠上花费的时间?或者有没有解决这个问题的实现?

And*_*nko 1

http://docs.oracle.com/javase/7/docs/api/java/lang/management/ThreadInfo.html

这个类包含类似的方法

getBlockedCount()

返回与此 ThreadInfo 关联的线程被阻止进入或重新进入监视器的总次数。

getBlockedTime()

返回自启用线程争用监视以来与此 ThreadInfo 关联的线程被阻止进入或重新进入监视器的大致累计经过时间(以毫秒为单位)。