在做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);
    }
   }
}

解决方案 »

  1.   

    应该可以这样理解:
    现在的CPU太快了,如果不sleep一下,这个线程就有可能一直运行到CPU分配给它的时间片完了才执行其他线程,这样就有可能一直执行一个线程,交替就不是很明显,让你看了输出结果你还以为跟没多线程的效果一样
      

  2.   

    sleep 好像不可以让其他线程得到调用, 他只会让自己的线程 阻塞掉,await  和notify 的结合是可以的 
      

  3.   

    自己的线程进入睡眠状态,被阻塞掉,其他线程就可以得到cpu进而得到执行。
      

  4.   

    比如10个人(线程)一太电脑(cpu) 你sleep了 别人就能用电脑了
      

  5.   

    为了防止CPU占用时间过长,因为是while(true)循环,如果不让线程空出CPU时间的话,其他进程(或线程)就会缓慢,就好像你做一个while死循环的时候,如果不空出CPU时间,你会发现你的程序像死机一样
    可以用yield替换sleep
      

  6.   

    如果不sleep,表示线程一直占用cpu资源,如果你写的是一个死循环,那么会发现你的这个程序占用掉100%的cpu时间,其他任何线程或者进程都得不到cpu资源。