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