Java多線程(四)java中的Sleep方法

點我跳過黑哥的卑鄙廣告行爲,進入正文。html

 

Java多線程系列更新中~java

  正式篇:多線程

  1. Java多線程(一) 什麼是線程
  2. Java多線程(二)關於多線程的CPU密集型和IO密集型這件事
  3. Java多線程(三)如何建立線程
  4. Java多線程(四)java中的Sleep方法
  5. Java多線程(五)線程的生命週期

  番外篇(神TM番外篇):函數

  1. Java 過一下基礎
  2. 轉載:java中Thread.sleep()函數使用
  3. Java多線程 Socket使用

 

 

Thread類爲睡眠線程提供了兩種方法:spa

  1. public static void sleep(long miliseconds)拋出InterruptedException
  2. public static void sleep(long miliseconds,int nanos)拋出InterruptedException

參數聲明:線程

  • miliseconds-以毫秒爲單位的睡眠時間。
  • nanos-這是0-999999額外納秒的睡眠時間。

用法示例

  1.不睡眠的狀況

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

輸出狀況(每臺計算機不同,每次運行也會不同,我截取部分數據分析)code

t1: 一、二、三、四、五、六、七、八、九、10htm

t2: 一、二、三、四、五、六、七、8blog

t1: 十一、十二、1三、1四、1五、1六、1七、1八、1九、20、2一、2二、2三、2四、2五、2六、2七、2八、2九、30生命週期

……

能夠看出,這兩個線程的確是交替執行的。JAVA採用搶佔式線程調度,也就是每一個線程由系統來分配時間,線程的切換並不禁線程自己決定。

  2. 線程睡眠的狀況

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

 這個輸出就是嚴格的一個一次的交替原則。

t1: 1

t2: 1

t1: 2

t2: 2

t1: 3

……

這是由於Sleep()使得當前線程進入阻塞狀態,系統便調用了另外一線程,循環往復,便出現了上面的輸出結果。那麼,什麼狀況阻塞,只有Sleep嗎?這就引出了線程的生命週期。

相關文章
相關標籤/搜索