浏览 520 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-05-07 关键字: 多线程
在做个高并发的项目,发现个的情况向大家请教。
下面的代码很简单。就是开2000个线程,线程里就是个死循环,每次循环sleep 20 ms. 当 sleep 20 ms的时候,我的CPU占用10-50%左右。 可是当改为sleep 19或者21 ms的时候,CPU占用一直100%。 为啥?
public static void main(String[] args) {
for (int i = 0; i < 2000; i++) {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-08
恩,我有这个关于多线程的困惑,期待解答ing
|
|
| 返回顶楼 | |
|
时间:2008-05-08
我建议你在运行程序的同时用vmstat观测一下CPU的状态,特别是context switch和interrupts这两项,对比sleep 19和sleep 20两种情况下context switch和interrupts有没有很大的差别。
|
|
| 返回顶楼 | |
|
时间:2008-05-08
robbin 写道 我建议你在运行程序的同时用vmstat观测一下CPU的状态,特别是context switch和interrupts这两项,对比sleep 19和sleep 20两种情况下context switch和interrupts有没有很大的差别。 谢谢建议。我忘记说了。只有在Windows下发生,没法vmstat。 |
|
| 返回顶楼 | |
|
时间:2008-05-08
对我来说没什么多大差别
sleep 21 还是20的时候 差不多都占用了95 %以上 |
|
| 返回顶楼 | |







