Java Thread.sleep(milis)函数是否使所有线程都处于睡眠状态?
我有一个“Runnable”类的代码片段如下:Java Thread.sleep(milis)函数是否使所有线程都处于睡眠状态?,java,multithreading,sleep,Java,Multithreading,Sleep,我有一个“Runnable”类的代码片段如下: public void run() { //Do some stuff while(!someCondition){ //Do some stuff while(anotherCondition){ try { Thread.sleep(60000); }catch (InterruptedException
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
}
调用线程睡眠(60000)代码>是否导致所有RunnableClass线程睡眠?Thread.sleep()
使当前线程睡眠。这在以下文件中有详细说明:
根据系统计时器和调度程序的精度和准确性,使当前执行的线程休眠(暂时停止执行)指定的毫秒数。线程不会失去任何监视器的所有权
根据手册:
使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数
因此,不,它不会影响所有线程。线程。sleep()
只会使调用线程睡眠。不,只有当前线程睡眠。根据文件:
导致当前正在执行的线程休眠(暂时停止
执行)指定的毫秒数
线程。睡眠(x)
导致当前线程(休眠)暂停执行'x'ms。这是一种使处理器时间可用于应用程序的其他线程或系统上的其他应用程序的有效方法。
Thread.sleep()
使当前线程睡眠;但这有点令人困惑。这就是为什么,现在;建议的方法是使用睡眠法。这个API是在JavaSE5版本中添加的
TimeUnit.SECONDS.sleep(5);
Javadoc:
使用此单元执行线程睡眠
。这是一种方便的方法,可以将时间参数转换为Thread.sleep
方法所需的形式
您还可以使用不同的单位,如
秒
,毫秒
等,以避免在sleep方法中传递的参数单位出现任何混乱。仅限当前线程。“这就是为什么,现在;建议使用TimeUnit sleep方法。”我不知道这是建议的方式-这是另一种方式。嗯…我应该用“更具可读性”的方式。感谢您的澄清@assylias