Topic: 一个线程的sleep问题

  Print this page

1.一个线程的sleep问题 Copy to clipboard
Posted by: sunxiaoming
Posted on: 2006-11-26 10:00

请大家帮我解释一下,我有点想不通,子线程调用sleep 为什么主线程却暂停了2秒后才执行?(是因为子线程休眠的时候,整个程序处于挂起状态么?为什么?)

(我想实现的是:将子线程设置成后台线程->启动->后休眠->然后主线程结束->程序退出!我得到的结果却是:程序启动后马上输出了子线程的打印(这里我想是因为子线程代码简单,执行的时间非常的段所以先输出了子线程的打印),然后等2秒后才输出主线程的打印!(这里想不通)

public class SleepTest {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    ThreadTest tt = new ThreadTest();
    Thread pp = new Thread(tt);
    pp.setDaemon(true);
    pp.start();
    try {
      pp.sleep(2000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.print(tt.i);

  }

}

class ThreadTest implements Runnable {
  static int i;

  public void run() {
    // TODO Auto-generated method stub
    i++;
    System.out.println("test sub running!!");

  }

}

2.Re:一个线程的sleep问题 [Re: sunxiaoming] Copy to clipboard
Posted by: cxp108
Posted on: 2006-11-27 09:42

sleep这个方法,一般来说我们都以Thread.sleep(1000)这样的方式来调用,来控制本线程休眠,很少以LZ这个方式调用。

sleep(Long time)这个方法是会其原理有点类似于阻塞,当你调用这个方法时pp线程进入休眠,但与此同时主线程也在等待sleep方法返回,因此看上去程序好像挂起了。
以上纯属个人观点,仅供参考。

3.Re:一个线程的sleep问题 [Re: sunxiaoming] Copy to clipboard
Posted by: sunxiaoming
Posted on: 2006-11-27 23:36

其实我想问的也正是在其他线程调用Sleep的时候为什么主线程会等待他?而不是继续执行?"要是那样多线程不是变成单线程的顺序执行了么?"就是这里有点想不通!
还是谢谢楼上的大侠! 我是个菜鸟问题多 呵呵

4.Re:一个线程的sleep问题 [Re: sunxiaoming] Copy to clipboard
Posted by: cxp108
Posted on: 2006-11-28 10:35

其实这个程序本身就存在着思路的问题(当然为了测试一个API编写的另当别论)
sleep()这个方法一般来说是留给线程自己调用的,也就是说当某个工作条件不暂时不满足时,自己要求自己进入休眠。sleep()方法很少提供给其他线程调用。

从使用的角度来说,开设一个线程就是为了让它自己工作,而不是由别人控制它工作。

5.Re:一个线程的sleep问题 [Re: sunxiaoming] Copy to clipboard
Posted by: sunxiaoming
Posted on: 2006-11-29 10:01

哦,是这样啊!
现在明白了!谢谢 楼上的大侠 呵呵


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923