繁体   English   中英

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

[英]Does Thread.sleep(milis) function make all Threads 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线程都睡不着?

Thread.sleep()使当前线程休眠。 这在Javadoc中有详细说明:

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

Thread.sleep()只使调用线程休眠。

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

  TimeUnit.SECONDS.sleep(5);

Javadoc:

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

此外,您可以使用不同的单位,如SECONDSMILLISECONDS等,以避免在睡眠方法内传递的参数单位出现任何混淆。

根据手册:

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

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

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

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

了Thread.sleep(X)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM