国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java多線程系列(8)--線程優先級和守護線程(后臺線程)

2019-11-08 00:58:10
字體:
來源:轉載
供稿:網友

一、線程優先級的基本概述

java中的線程優先級的范圍是1~10.默認的優先級是5。”高優先級線程”會優先于“低優先級線程”執行。 線程的優先級將該線程的重要性傳遞給了調度器。盡管CPU處理現有線程集的順序是不確定的,但是調度器傾向于讓優先權最高的線程先執行。然而,這并不是意味著優先權較低的線程得不到執行(即優先權并不會導致死鎖),優先級低的線程僅僅是執行的頻率較低。 Java中有兩種線程:用戶線程和守護線程。 可以通過isDaemon()方法來區別它們:如果返回false。則說明該線程是“用戶線程;否則就是“守護線程”。 用戶線程一般用于執行用戶級任務,而守護線程,即后臺線程,一般用來執行后臺任務。并且這種線程并不屬于程序中不可或缺的部分,當所有非后臺線程(用戶線程)結束時,程序也就終止了,同時會殺死進程中的所有的后臺線程;也就是說,只要有非后臺線程還在運行,程序就不會終止。

二、線程優先級代碼實例

package Test;/** * Created by LKL on 2017/2/21. */public class TestPRiority { public static void main(String[] args){ System.out.println(Thread.currentThread().getName() +"("+Thread.currentThread().getPriority()+ ")"); Thread t1=new ThreadPriority("t1"); // 新建t1 Thread t2=new ThreadPriority("t2"); // 新建t2 t1.setPriority(1); // 設置t1的優先級為1 t2.setPriority(10); // 設置t2的優先級為10 t1.start(); // 啟動t1 t2.start(); // 啟動t2 }}package Test;/** * Created by LKL on 2017/2/21. */public class ThreadPriority extends Thread { public ThreadPriority(String name){ super(name); } public void run(){ for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+"("+Thread.currentThread().getPriority()+"),loop" + i); } }}

其中兩次運行結果如下:

main(5)t2(10),loop0t2(10),loop1t2(10),loop2t1(1),loop0t2(10),loop3t1(1),loop1t2(10),loop4t1(1),loop2t1(1),loop3t1(1),loop4main(5)t2(10),loop0t2(10),loop1t2(10),loop2t2(10),loop3t2(10),loop4t1(1),loop0t1(1),loop1t1(1),loop2t1(1),loop3t1(1),loop4

通過對比可以得到,高優先級只是體現出執行的頻率會更高,也不是一直占用。

三、守護線程的代碼實例

package Test;/** * Created by LKL on 2017/2/21. */public class TestDaemon { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() +"(isDaemon="+Thread.currentThread().isDaemon()+ ")"); Thread t1=new MyThread4("t1"); // 新建t1 Thread t2=new MyDaemon("t2"); // 新建t2 t2.setDaemon(true); // 設置t2為守護線程 t1.start(); // 啟動t1 t2.start(); // 啟動t2 }}package Test;/** * Created by PVer on 2017/2/21. */public class MyDaemon extends Thread{ public MyDaemon(String name) { super(name); } public void run(){ try { for (int i=0; i<10000; i++) { Thread.sleep(1); System.out.println(this.getName() +"(isDaemon="+this.isDaemon()+ ")" +", loop "+i); } } catch (InterruptedException e) { } }}package Test;/** * Created by LKL on 2017/2/21. */public class MyThread4 extends Thread { public MyThread4(String name) { super(name); } @Override public void run() { for (int i=0;i<5;i++){ try { Thread.sleep(3); System.out.println(this.getName()+"(isDaemon="+this.isDaemon()+")"+",loop" +i); } catch (InterruptedException e) { e.printStackTrace(); } } }}

運行結果如下:

main(isDaemon=false)t2(isDaemon=true), loop 0t2(isDaemon=true), loop 1t2(isDaemon=true), loop 2t1(isDaemon=false),loop0t2(isDaemon=true), loop 3t2(isDaemon=true), loop 4t1(isDaemon=false),loop1t2(isDaemon=true), loop 5t2(isDaemon=true), loop 6t2(isDaemon=true), loop 7t2(isDaemon=true), loop 8t1(isDaemon=false),loop2t2(isDaemon=true), loop 9t2(isDaemon=true), loop 10t2(isDaemon=true), loop 11t1(isDaemon=false),loop3t2(isDaemon=true), loop 12t2(isDaemon=true), loop 13t1(isDaemon=false),loop4t2(isDaemon=true), loop 14

將線程t2設置為守護線程,而主線程和線程t1為用戶線程,當用戶線程執行完畢后,只有線程t2這個守護線程時,JVM會自動退出。

文章只是作為自己的學習筆記,借鑒了網上的許多案例,如果覺得闊以的話,希望多交流,在此謝過…


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永和县| 霍邱县| 松潘县| 长治县| 鲁甸县| 兰考县| 阿克苏市| 蚌埠市| 阿克| 广德县| 临颍县| 烟台市| 锡林浩特市| 康平县| 改则县| 蕉岭县| 韶关市| 平潭县| 南投市| 西平县| 淄博市| 盘锦市| 宣城市| 雅安市| 康平县| 抚松县| 汉川市| 台州市| 建水县| 长葛市| 左云县| 旅游| 长武县| 乃东县| 浏阳市| 崇礼县| 松原市| 临猗县| 安宁市| 萨嘎县| 天气|