1. 程式人生 > 程式設計 >Java Thread之Sleep()使用方法總結

Java Thread之Sleep()使用方法總結

一、API簡介

Thread.sleep()是Thread類的一個靜態方法,使當前執行緒休眠,進入阻塞狀態(暫停執行),如果執行緒在睡眠狀態被中斷,將會丟擲IterruptedException中斷異常。。主要方法如下:

【a】sleep(long millis) 執行緒睡眠 millis 毫秒

【b】sleep(long millis,int nanos)執行緒睡眠 millis 毫秒 + nanos 納秒

Api文件:

Java Thread之Sleep()使用方法總結

二、使用方法

注意:在哪個執行緒裡面呼叫sleep()方法就阻塞哪個執行緒。

public class SleepDemo {
  public static void main(String[] args) throws InterruptedException {
    Process process = new Process();
    Thread thread = new Thread(process);
    thread.setName("執行緒Process");
    thread.start();
 
    for (int i = 0; i < 10; i++) {
      System.out.println(Thread.currentThread().getName() + "-->" + i);
      //阻塞main執行緒,休眠一秒鐘
      Thread.sleep(1000);
    }
  }
}
 
/**
 * 執行緒類
 */
class Process implements Runnable {
 
  @Override
  public void run() {
 
    for (int i = 0; i < 10; i++) {
      System.out.println(Thread.currentThread().getName() + "-->" + i);
 
      //休眠一秒鐘
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
 
  }
}

執行結果:main執行緒執行一次之後休眠一秒鐘,讓出cpu,此時Process執行緒執行一次然後又休眠一秒,依次執行。

Java Thread之Sleep()使用方法總結

三、示例

下面以一個倒計時的功能來進一步說明sleep()方法的使用:

/**
 * @Description: 執行緒休眠Sleep()方法
 * @Author: weishihuai
 * @Date: 2018/11/11 21:31
 * <p>
 * 1. 注意:sleep()方法使用的位置,如果使用在main執行緒執行程式碼中,則阻塞的是main執行緒。如果在其他執行緒執行的程式碼中,則阻塞的是執行這些程式碼的執行緒
 * 2. 案例: 倒計時功能
 */
public class TestSleepThread {
  public static void main(String[] args) throws InterruptedException {
    countDown(10000);
  }
 
  /**
   * 倒計時方法
   *
   * @param mills 倒計時開始的時間距離當前時間多少毫秒
   */
  public static void countDown(long mills) {
    Date endDate = new Date(System.currentTimeMillis() + mills);
    long endTime = endDate.getTime();
 
    while (true) {
      System.out.println(new SimpleDateFormat("hh:mm:ss").format(endDate));
      //下一秒時間
      endDate = new Date(endDate.getTime() - 1000);
      //休眠一秒鐘
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      if (endTime - endDate.getTime() > mills) {
        break;
      }
    }
  }
 
}

執行結果:

Java Thread之Sleep()使用方法總結

四、注意問題

【a】sleep()方法是Thread類的靜態方法,如果呼叫執行緒物件.sleep()方法並不是該執行緒就休眠,反正在哪一個執行緒裡面執行了sleep()方法哪一個執行緒就休眠。

【b】執行緒睡眠到期自動甦醒,並返回到可執行狀態(就緒),不是執行狀態。

到此這篇關於Java Thread之Sleep()使用方法總結的文章就介紹到這了,更多相關Java Thread Sleep()內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!