当前位置: 代码迷 >> Eclipse >> 关于多线程的小疑点。
  详细解决方案

关于多线程的小疑点。

热度:81   发布时间:2016-04-23 02:04:49.0
关于多线程的小问题。。

public class ControlThread extends Thread
{
  private int nb;
  private int tp;
  CharacterString what;
  public ControlThread(int n,int k,String l) 
  {
  nb=n;
  tp=k;
  what=new CharacterString(l);
  }
  public void run()
  {
  while (true)
  {
  for(int k=0;k<nb;k++)
  {
  what.display();
  }
  try {
    Thread.sleep(tp);
  }
  catch(InterruptedException e)
  {e.printStackTrace();}
  }
  }
  
}
老师给的一段代码,有些不太懂。。
弱弱的问两个问题。
1. 为什么run方法之后有这么一条语句while(true),之后已经是for循环了,为什么还要写while(true)。并且小弟在多线程的问题中经常看到while(true),不知道为什么要这么写。。
2. 多线程里,也经常让一个线程sleep。。小弟不懂这是为什么。。。目的是什么??

谢牛人解答。。先谢过
------最佳解决方案--------------------
1. 为什么run方法之后有这么一条语句while(true),之后已经是for循环了,为什么还要写while(true)。并且小弟在多线程的问题中经常看到while(true),不知道为什么要这么写。。
—— 如果希望这个线程持续不断的执行一段逻辑的话,就会这么写。
—— for循环跟while循环,虽然你看起来都是循环,但它们的含义完全不同,对于周期性任务的线程,常规结构都是:
while (true) { // 持续不断的做这个任务
    任务内容....
    Thread.sleep(任务间隔);
}

2. 多线程里,也经常让一个线程sleep。。小弟不懂这是为什么。。。目的是什么??
—— 这个是根据实际需求来的,一般来说周期性任务并不需要连续执行,比如你写的这个线程,是每10秒钟就去检查下饮水机是不是空了,如果空了就给行政部发个邮件。那你的程序加入一个 sleep(10*1000) 显然在满足需求的同时能降低CPU开销。
------其他解决方案--------------------
1.while(true)是让里面的逻辑一直循环执行,而for这个循环相当于遍历你想遍历的内容一样,比如你这段代码里面的for循环是会结束的,而while(true)则会一直执行
2.sleep是让线程暂时停止运行,让出cpu
  相关解决方案