Java线程睡眠
时间:2020-02-23 14:35:16 来源:igfitidea点击:
java.lang.Thread
的Sleep方法用于在特定时间段内“暂停线程的当前执行”。
关于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.igi.theitroad.thread; public class FirstThread implements Runnable{ public void run() { System.out.println("Thread is running"); } }
创建名为的主类 ThreadSleepExampleMain.java
package org.igi.theitroad.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); } }
我们可以看到延迟1000毫秒(1秒)。
如前所述,其准确性取决于系统定时器和调度率。
线程睡眠如的工作原理
Thread.sleep()
适用于线程调度程序,暂停特定时间段的当前线程执行。
一旦线程等待期结束,线程的状态再次更改为Runnable,它可用于CPU的进一步执行。