Thread.sleep(100)的问题

wshyhai 2009-04-28 11:47:04
在做Socket编程的时候
为什么总要使线程sleep,不太明白地说

例如:

public void run(){
while(true){
try{
String inStr = bufferedReader.readLine();
if(inStr.equals("exit")){
printWriter.close();
bufferedReader.close();
break;
}else{
printWriter.println("From Server: " + inStr);
}
sleep(300);
}catch(Exception e){
printWriter = null;
bufferedReader = null;
throw new RuntimeException(e);
}
}
}
...全文
1082 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
meander 2009-04-30
  • 打赏
  • 举报
回复
自己的线程进入睡眠状态,被阻塞掉,其他线程就可以得到cpu进而得到执行。
figure_li 2009-04-30
  • 打赏
  • 举报
回复
sleep 好像不可以让其他线程得到调用, 他只会让自己的线程 阻塞掉,await 和notify 的结合是可以的
树成 2009-04-30
  • 打赏
  • 举报
回复
如果不sleep,表示线程一直占用cpu资源,如果你写的是一个死循环,那么会发现你的这个程序占用掉100%的cpu时间,其他任何线程或者进程都得不到cpu资源。
qybao 2009-04-30
  • 打赏
  • 举报
回复
为了防止CPU占用时间过长,因为是while(true)循环,如果不让线程空出CPU时间的话,其他进程(或线程)就会缓慢,就好像你做一个while死循环的时候,如果不空出CPU时间,你会发现你的程序像死机一样
可以用yield替换sleep
WN2007 2009-04-30
  • 打赏
  • 举报
回复
是让当前运行的线程转出运行状态,让其它跟这个线程有相同优先级的可运行线程能被调度运行
cantalou 2009-04-30
  • 打赏
  • 举报
回复
比如10个人(线程)一太电脑(cpu) 你sleep了 别人就能用电脑了
GeekZFZ 2009-04-28
  • 打赏
  • 举报
回复
支持以上回复
dreamhunter_lan 2009-04-28
  • 打赏
  • 举报
回复
让其他线程得到调度
wshyhai 2009-04-28
  • 打赏
  • 举报
回复
没有其他的作用吗?
ty_tarena_pger 2009-04-28
  • 打赏
  • 举报
回复
主要在调试时用(用它是为了让你更好的看出线程之间的切换)
wshyhai 2009-04-28
  • 打赏
  • 举报
回复
还是不太没明白地说!
不过谢谢各位
dreamhunter_lan 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wshyhai 的回复:]
让其他线程得到调度是什么意思,哪位明白地给详细地说说,谢谢
[/Quote]
应该可以这样理解:
现在的CPU太快了,如果不sleep一下,这个线程就有可能一直运行到CPU分配给它的时间片完了才执行其他线程,这样就有可能一直执行一个线程,交替就不是很明显,让你看了输出结果你还以为跟没多线程的效果一样。。。
wshyhai 2009-04-28
  • 打赏
  • 举报
回复
让其他线程得到调度是什么意思,哪位明白地给详细地说说,谢谢

62,614

社区成员

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

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