Java Thread sleep()方法

2019-10-16 22:24:17

Thread類的sleep()方法用於在指定的時間內睡眠(暫停)執行緒。

語法

public static void sleep(long milis)throws InterruptedException  
public static void sleep(long milis, int nanos)throws InterruptedException

引數

  • millis:它以毫秒為單位定義睡眠時間。
  • nanos:0-999999睡眠的額外納秒數。

異常

  • IllegalArgumentException:如果millis的值為負或nanos的值不在0-999999範圍內。
  • InterruptedException:如果任何執行緒中斷了當前執行緒。丟擲此異常時,將清除當前執行緒的中斷狀態。

範例

public class SleepExp1 extends Thread  
{    
    public void run()  
    {    
        for(int i=1;i<5;i++)  
        {    
            try  
            {  
                Thread.sleep(500);  
            }catch(InterruptedException e){System.out.println(e);}    
            System.out.println(i);    
        }    
    }    
    public static void main(String args[])  
    {    
        SleepExp1 t1=new SleepExp1();    
        SleepExp1 t2=new SleepExp1();    
        t1.start();    
        t2.start();    
    }    
}

執行上面範例程式碼,得到以下結果:

1
1
2
2
3
3
4
4
5
5

如您所知,一次只執行一個執行緒。 如果在指定時間內休眠一個執行緒,則執行緒排程程式會選擇另一個執行緒,依此類推。

例2: 睡眠時間為負時

public class SleepExp2 extends Thread  
{    
    public void run()  
    {    
        for(int i=1;i<5;i++)  
        {    
            try  
            {  
                Thread.sleep(-500); // sleep time is negative  
            }catch(InterruptedException e){System.out.println(e);}    
            System.out.println(i);    
        }    
    }    
    public static void main(String args[])  
    {    
        SleepExp2 t1=new SleepExp2();    
        SleepExp2 t2=new SleepExp2();    
        t1.start();    
        t2.start();    
    }    
}

執行上面範例程式碼,得到以下結果:

Exception in thread "Thread-0" Exception in thread "Thread-1" java.lang.IllegalArgumentException: timeout value is negative
    at java.lang.Thread.sleep(Native Method)
    at SleepExp2.run(SleepExp2.java:9)
java.lang.IllegalArgumentException: timeout value is negative
    at java.lang.Thread.sleep(Native Method)
    at SleepExp2.run(SleepExp2.java:9)