溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java中sleep的使用方法

發(fā)布時(shí)間:2020-06-24 16:05:05 來(lái)源:億速云 閱讀:302 作者:元一 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中的小編將會(huì)給大家?guī)?lái)有關(guān)java中sleep的使用方法,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

sleep()使當(dāng)前線程進(jìn)入停滯狀態(tài)(阻塞當(dāng)前線程),讓出CPU的使用、目的是不讓當(dāng)前線程獨(dú)自霸占該進(jìn)程所獲的CPU資源,以留一定時(shí)間給其他線程執(zhí)行的機(jī)會(huì)Thread.sleep(long millis)Thread.sleep(long millis, int nanos)靜態(tài)方法強(qiáng)制當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行),以“減慢線程”。

  • 當(dāng)線程睡眠時(shí),它睡在某個(gè)地方,在蘇醒之前不會(huì)返回到可運(yùn)行狀態(tài)。

  • 當(dāng)睡眠時(shí)間到期,則返回到可運(yùn)行狀態(tài)。

1、線程睡眠的原因:線程執(zhí)行太快,或者需要強(qiáng)制進(jìn)入下一輪,因?yàn)镴ava規(guī)范不保證合理的輪換。

2、睡眠的實(shí)現(xiàn):調(diào)用靜態(tài)方法

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }

3、睡眠的位置:為了讓其他線程有機(jī)會(huì)執(zhí)行,可以將Thread.sleep()的調(diào)用放線程run()之內(nèi)。這樣才能保證該線程執(zhí)行過(guò)程中會(huì)睡眠。

public class TestSleep {
 
  public static void main(String[] args) {
   
    MyThread2 t1 = new MyThread2("TestSleep");
    t1.start();
      
     for(int i=0 ; i <10; i++)
              System.out.println("I am Main Thread");
   }
 }
 
 class MyThread2 extends Thread {
  
    MyThread2(String s) {
     super(s);
     }
     
  public void run() {
    for(int i = 1; i <= 10; i++) {
     System.out.println("I am "+getName());
     try {
      sleep(1000); //暫停,每一秒輸出一次
      }catch (InterruptedException e) {
      return;
     }
     }
   }
  }

注意:

  • 1、線程睡眠到期自動(dòng)蘇醒,并返回到可運(yùn)行狀態(tài),不是運(yùn)行狀態(tài)。sleep()中指定的時(shí)間是線程不會(huì)運(yùn)行的最短時(shí)間。因此,sleep()方法不能保證該線程睡眠到期后就開始執(zhí)行。

  • 2、sleep()是靜態(tài)方法,只能控制當(dāng)前正在運(yùn)行的線程。

  • 3、線程睡眠是幫助所有線程獲得運(yùn)行機(jī)會(huì)的最好方法。


實(shí)例:一個(gè)計(jì)數(shù)器,計(jì)數(shù)到100,在每個(gè)數(shù)字之間暫停1秒,每隔10個(gè)數(shù)字輸出一個(gè)字符串

public class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 100; i++) {
            if ((i) % 10 == 0) {
                System.out.println("-------" + i);
            }
            System.out.print(i);
            try {
                Thread.sleep(1000);
                System.out.print("    線程睡眠1秒!\n");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new MyThread().start();
    }
}

上述就是小編為大家分享的java中sleep的使用方法了,如果您也有類似的疑惑,不妨礙參照上述分析進(jìn)行理解。如果想了解更多相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI