執行緒優先順序和守護執行緒
阿新 • • 發佈:2018-12-25
全文概要
本文主要介紹執行緒的優先順序和守護執行緒。
- 建立的執行緒預設的優先順序是5,當然可以自行設定優先順序,優先順序為[1,10]區間的整數;
- java中有兩種執行緒,使用者執行緒和守護執行緒,可以通過isDaemon()來判斷,返回true表示守護執行緒;
- 使用者執行緒一般用來執行使用者級任務,而守護執行緒一般用來執行後臺任務,除此之外,守護執行緒有一個重要的特性:當所有的使用者執行緒全部執行完畢後,無論守護執行緒的邏輯是否完成,JVM會自動結束守護執行緒。
守護執行緒介紹
- 程式碼案例
package com.tml.javaCore.thread; public class DaemoDemo { public static void main(String[] args) { Thread thread_01 = new Thread(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ":priority is:" + Thread.currentThread().getPriority() ); for(int i=0;i<10;i++){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ": is loop " + i); } } }, "thread_01"); thread_01.setPriority(1); thread_01.start(); Thread thread_02 = new Thread(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ":priority is:" + Thread.currentThread().getPriority() ); for(int i=0;i<100;i++){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ": is loop " + i); } } }, "thread_02"); thread_02.setDaemon(true);//設定守護執行緒一定要在start()方法之前 thread_02.setPriority(10); thread_02.start(); } }
- 輸出結果
thread_01:priority is:1
thread_02:priority is:10
thread_01: is loop 0
thread_02: is loop 0
thread_01: is loop 1
thread_02: is loop 1
thread_02: is loop 2
thread_01: is loop 2
thread_02: is loop 3
thread_01: is loop 3
thread_02: is loop 4
thread_01: is loop 4
thread_01: is loop 5
thread_02: is loop 5
thread_01: is loop 6
thread_02: is loop 6
thread_01: is loop 7
thread_02: is loop 7
thread_01: is loop 8
thread_02: is loop 8
thread_01: is loop 9
thread_02: is loop 9
- 結果分析
- 主執行緒中建立了連個執行緒,執行緒1的優先順序設定為1,執行緒2的優先順序設定為10,當設定執行緒優先順序的值不在[1,10]整數區間內,會丟擲java.lang.IllegalArgumentException執行時異常,除此之外,執行緒2還被設定為守護執行緒,注意設定守護執行緒一定要在start()方法之前,否則會丟擲java.lang.IllegalThreadStateException執行時異常;
- 由於列印的時候,執行緒睡眠100毫秒,這就導致執行緒1和執行緒2依次執行列印任務;
- 執行緒1是使用者執行緒,執行緒2是守護執行緒,當執行緒1執行完成後,JVM會自動結束執行緒2,即便執行緒2迴圈沒有結束。