关于 sleep 方法的一些要点是:
-
它会导致当前正在执行的线程休眠特定的时间。
-
其准确性取决于
system timers and schedulers .
-
它保留它已获取的监视器,因此如果从
synchronized 上下文中调用它,则没有其他线程可以进入该块或方法。
-
如果我们调用
interrupt() 方法,它会唤醒休眠的线程。
synchronized(lockedObject) {
Thread.sleep(1000); // It does not release the lock on lockedObject.
// So either after 1000 miliseconds, current thread will wake up, or after we call
//t. interrupt() method.
示例:创建一个类FirstThread.java ,如下所示。
package org.arpit.java2blog.thread;
public class FirstThread implements Runnable{
public void run()
{
System.out.println("Thread is running");
}
}
创建名为的主类ThreadSleepExampleMain.java
package org.arpit.java2blog.thread;
public class ThreadSleepExampleMain {
public static void main(String args[])
{
FirstThread ft= new FirstThread();
Thread t=new Thread(ft);
t.start();
long startTime=System.currentTimeMillis();
try {
// putting thread on sleep
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long endTime=System.currentTimeMillis();
long timeDifference=(endTime-startTime);
System.out.println("Time difference between before and after sleep call: "+timeDifference);
}
}
当您运行上述程序时,您将获得以下输出。
Thread is running
Time difference between before and after sleep call: 1001
您可以看到有 1000 毫秒(1 秒)的延迟。如前所述,其准确性取决于系统计时器和调度程序。
线程休眠的工作原理
Thread.sleep() 与线程调度程序一起使用以在特定时间段内暂停当前线程执行。一旦线程等待期结束,线程的状态将再次更改为可运行,并可用于 CPU 进一步执行。
这就是 Java 线程睡眠示例的全部内容
|