Thread.sleep(milis)函数是否使所有线程都睡眠?

时间:2013-02-28 09:20:06

标签: java multithreading sleep

我有一个来自“Runnable”类的代码片段就是这样:

public void run() {
    //Do some stuff
    while(!someCondition){      
        //Do some stuff
        while(anotherCondition){
            try {
                Thread.sleep(60000);
            }catch (InterruptedException e){
                logger.error(e.getMessage());
                e.printStackTrace();
            }
            //Do some stuff
        }
        threadExecutor = Executors.newCachedThreadPool();
        RunnableClass rc = new RunnableClass();
        Thread rcThread = new Thread(rc);
        rcThread.setDefaultUncaughtExceptionHandler(new SomeUncaughtExHandler());
        threadExecutor.execute(rcThread);
    }
    //Do some stuff     
}

调用Thread.sleep(60000);会导致所有RunnableClass线程都睡眠吗?

6 个答案:

答案 0 :(得分:6)

Thread.sleep()使当前线程睡眠。这在Javadoc

中有详细说明
  

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统定时器和调度程序的精度和准确性。该线程不会失去任何监视器的所有权。

答案 1 :(得分:1)

Thread.sleep()只会使调用线程处于休眠状态。

答案 2 :(得分:1)

Thread.sleep()使当前线程休眠;但它有点令人困惑。这就是为什么,现在;建议的方法是使用TimeUnit睡眠方法。此API已添加到Java SE5版本中。

  TimeUnit.SECONDS.sleep(5);

Javadoc:

  

使用此单位执行Thread.sleep。这是一种方便的方法,可以将时间参数转换为Thread.sleep方法所需的形式。

此外,您可以使用SECONDSMILLISECONDS等其他单位来避免在睡眠方法中传递的参数单位出现任何混淆。

答案 3 :(得分:0)

根据手册:

  

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数

所以不,它不影响所有线程。

答案 4 :(得分:0)

不,只有当前线程休眠。根据文件:

  

导致当前正在执行的线程进入休眠状态(暂时停止   执行)指定的毫秒数

答案 5 :(得分:0)

  

的Thread.sleep(x)的

导致当前线程(睡眠)暂停执行以获取'x'ms 。这是使应用程序的其他线程或系统上的其他应用程序可以使用处理器时间的有效方法。