# 凍結執行緒

# sleep() 函數

sleep() 函數可以將執行緒休息片刻,如此便能暫緩執行緒的運行。
sleep(s) => 代表休息 s 毫秒 (10-3 秒)

class multi_Test{
    private String name;
    public multi_Test(String str){
        name=str;
    }
    public void run(){
        try{
            sleep((int)(1000*Math.random())); // 隨機停止
        } catch(InterruptedException e){}
        System.out.println(name);
    }
}

sleep() 可能會拋出 InterruptedException 例外,
所以,將 sleep() 撰寫在 try-catch 區塊內。

Math.random() 可以產生範圍為 0~1 的浮點數,
乘上 1000,再強轉成整數就可以產生隨機休息的效果。

完整範例
class multi_Test extends Thread{
    private String name;
    public multi_Test(String str){
        name=str;
    }
    public void run(){
        try{
            sleep((int)(1000*Math.random()));
        }catch(InterruptedException e){}
        System.out.println(name);
    }
}
public class multi_thread{
    public static void main(String args[]){
        multi_Test apple=new multi_Test("apple");
        multi_Test pen=new multi_Test("pen");
        apple.start();
        pen.start();
    }
}

# join() 函數

app.start();
pen.start();

在上面的程式碼中,可以說是同時啟動的,那如果再啟動的下方再加上一行 main()運行結束

app.start();
pen.start();
System.out.println("main()運行結束");

會發現 main()運行結束 是第一個被打印出來的,所以,必須釐清, main() 本身也是一個執行緒,各執行緒會各自使用資源運行,所以,輸出字樣不必等待其他執行緒的運行,就理所當然的先打印出來了。

因此,想要達到上述的效果,就必須使用 join() 來處理執行緒的排程。

執行緒與另一個執行緒 join() 一起時:
當有其他執行緒呼叫 join() ,原來正執行的執行緒(或程式碼)會先暫停。

apple.start();
try{
   apple.join();
   pen.start();
   pen.join();
}catch(InterruptedException e){}
System.out.println("main() 結束");

在啟動 apple 執行緒後會先停留在 apple.join() 等待該執行緒完成,才會執行下一行程式(啟動 pen 執行緒);
同理 pen 執行緒會停留在 pen.join() ,等到執行緒結束後就會將字串「 main() 結束 」字串印出。

join() 會拋出 InterruptedException 例外,
因此才必須將 join() 寫在 try-catch 區塊,而 catch 要捕捉例外。

# 執行順序

Java 執行緒的優先順序是使用 1~10 來表示,數字大代表優先權較高(意指先執行)。

有兩個函數與優先權相關:

  • setPriority() 用來設定優先順序
  • getPriority() 用來取得順序之值
    而在 setPriority() 的引數可以使用以下三個常用的代碼:
  • MAX_PRIORTY 最大優先權數值
  • MIN_PRIORTY 最小優先權數值
  • NORM_PRIORTY 系統預設
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay