请问为什么我写的线程CPU占用率始终是100%

廖雪峰 2003-08-30 01:15:11
我写的线程CPU占用率始终是100%,代码如下:

public void run()
{
DatagramSocket socket = new DatagramSocket(PORT);
socket.setSoTimeOut(100);
while(!stop)
{
try
{
socket.receive(dp);
add(dp);
}
catch(Exception e) {}
}
try
{
socket.close();
}
catch(Exception e) {}
}

一共只有2个这样的线程,而且网络流量很小,1秒钟才几个包,为什么CPU占用率始终是100%???
...全文
53 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
廖雪峰 2003-10-02
  • 打赏
  • 举报
回复
问题解决
原来不是这个线程引起的
谢谢大家!
shuki 2003-09-02
  • 打赏
  • 举报
回复
你的while 一直在进行工作阿,可能是死循环。你在看一下stop的值 ,做个debug
fita 2003-09-01
  • 打赏
  • 举报
回复
检查一下异常,在异常处理中记录一下异常信息,看现象应该是出现了非超时的异常,你又没有处理,造成了死循环
Kylix_XP 2003-09-01
  • 打赏
  • 举报
回复
整个程序设计有问题!!

使用reactor模式,用事件机制!! 当接到数据包时候就触发事件,然后再处理事件!!没有数据包时,你的CPU就不用去运转了!
否则即使一个线程,你的CPU资源也会耗尽!!
xinxinduyu 2003-09-01
  • 打赏
  • 举报
回复
让你的循环适当的休息一会好吗?这样会累到的,休息好了才可以更好的干活呀
nosnowli 2003-09-01
  • 打赏
  • 举报
回复
你的while循环一直在运行啊,你让它歇会儿就行了。

在while中 插入:Thread.currentThread().sleep(100);

我保证你CPU降下来。sleep()中的数自己可以设置。
teekid 2003-08-31
  • 打赏
  • 举报
回复
不要老是调用你的add方法,只有当你receive到了数据后才调用add方法
joyrush 2003-08-31
  • 打赏
  • 举报
回复
你cpu 太弱了

-_____-
jan4984 2003-08-30
  • 打赏
  • 举报
回复
不知道你的add方法是什么内容,应该不至于如此的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧