3

我有一个“可运行”类的代码片段是这样的:

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 线程休眠?

4

6 回答 6

6

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

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

于 2013-02-28T09:22:12.490 回答
1

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

于 2013-02-28T09:22:49.903 回答
1

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

  TimeUnit.SECONDS.sleep(5);

爪哇文档:

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

您也可以使用不同的单位,如等SECONDSMILLISECONDS以避免在 sleep 方法中传递的参数单位产生任何混淆。

于 2013-02-28T09:57:58.723 回答
0

根据手册:

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

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

于 2013-02-28T09:22:46.237 回答
0

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

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

于 2013-02-28T09:23:12.807 回答
0

线程.sleep(x)

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

于 2013-02-28T09:30:24.730 回答