<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java多線程——線程優(yōu)先級(jí)和守護(hù)線程

          共 904字,需瀏覽 2分鐘

           ·

          2020-09-11 05:14


          一、線程優(yōu)先級(jí)的介紹

          ?????

          java 中的線程優(yōu)先級(jí)的范圍是1~10,默認(rèn)的優(yōu)先級(jí)是5。“高優(yōu)先級(jí)線程”會(huì)優(yōu)先于“低優(yōu)先級(jí)線程”執(zhí)行。

          ?????

          java 中有兩種線程:用戶線程守護(hù)線程。可以通過isDaemon()方法來區(qū)別它們:如果返回false,則說明該線程是“用戶線程”;否則就是“守護(hù)線程”。用戶線程一般用于執(zhí)行用戶級(jí)任務(wù),而守護(hù)線程也就是“后臺(tái)線程”,一般用來執(zhí)行后臺(tái)任務(wù)。需要注意的是:Java虛擬機(jī)在“用戶線程”都結(jié)束后會(huì)后退出。


          JDK 中關(guān)于線程優(yōu)先級(jí)和守護(hù)線程的介紹如下:

          ??????

          每個(gè)線程都有一個(gè)優(yōu)先級(jí)。“高優(yōu)先級(jí)線程”會(huì)優(yōu)先于“低優(yōu)先級(jí)線程”執(zhí)行。每個(gè)線程都可以被標(biāo)記為一個(gè)守護(hù)進(jìn)程或非守護(hù)進(jìn)程。在一些運(yùn)行的主線程中創(chuàng)建新的子線程時(shí),子線程的優(yōu)先級(jí)被設(shè)置為等于“創(chuàng)建它的主線程的優(yōu)先級(jí)”,當(dāng)且僅當(dāng)“創(chuàng)建它的主線程是守護(hù)線程”時(shí)“子線程才會(huì)是守護(hù)線程”。

          ???

          當(dāng)Java虛擬機(jī)啟動(dòng)時(shí),通常有一個(gè)單一的非守護(hù)線程(該線程通過是通過main()方法啟動(dòng))。JVM會(huì)一直運(yùn)行直到下面的任意一個(gè)條件發(fā)生,JVM就會(huì)終止運(yùn)行:


          ??? (01) 調(diào)用了exit()方法,并且exit()有權(quán)限被正常執(zhí)行。
          ??? (02) 所有的“非守護(hù)線程”都死了(即JVM中僅僅只有“守護(hù)線程”)。

          ????

          每一個(gè)線程都被標(biāo)記為“守護(hù)線程”或“用戶線程”。當(dāng)只有守護(hù)線程運(yùn)行時(shí),JVM會(huì)自動(dòng)退出。


          二、線程優(yōu)先級(jí)的示例


          我們先看看優(yōu)先級(jí)的示例?:


          package?com.demo.threadPriority;

          public?class?MyThread?extends?Thread{
          ????
          ????public?MyThread(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);
          ????????}
          ????}

          }


          package com.demo.threadPriority;

          public?class?Demo?{
          ????
          ????public?static?void?main(String[] args) {

          ????????System.out.println(Thread.currentThread().getName()
          ????????????????+"("+Thread.currentThread().getPriority()+ ")");

          ????????Thread t1=new?MyThread("t1"); // 新建t1
          ????????Thread t2=new?MyThread("t2"); // 新建t2
          ????????t1.setPriority(1); // 設(shè)置t1的優(yōu)先級(jí)為1
          ????????t2.setPriority(10); // 設(shè)置t2的優(yōu)先級(jí)為10
          ????????t1.start(); // 啟動(dòng)t1
          ????????t2.start(); // 啟動(dòng)t2
          ????}

          }


          運(yùn)行結(jié)果:


          main(5)
          t1(1), loop?0
          t1(1), loop?1
          t2(10), loop?0
          t1(1), loop?2
          t2(10), loop?1
          t1(1), loop?3
          t2(10), loop?2
          t1(1), loop?4
          t2(10), loop?3
          t2(10), loop?4


          結(jié)果說明


          (01) 主線程main的優(yōu)先級(jí)是5。
          (02) t1的優(yōu)先級(jí)被設(shè)為1,而t2的優(yōu)先級(jí)被設(shè)為10。cpu在執(zhí)行t1和t2的時(shí)候,根據(jù)時(shí)間片輪循調(diào)度,所以能夠并發(fā)執(zhí)行。


          三、守護(hù)線程的示例


          下面是守護(hù)線程的示例。


          package?com.demo.daemonThread;

          public?class?MyThread?extends?Thread{
          ????
          ????public?MyThread(String name)?{
          ????????super(name);
          ????}

          ????public?void?run(){
          ????????try?{
          ????????????for?(int?i=0; i<5; i++) {
          ????????????????Thread.sleep(3);
          ????????????????System.out.println(this.getName() +"(isDaemon="+this.isDaemon()+ ")"?+", loop "+i);
          ????????????}
          ????????} catch?(InterruptedException e) {
          ????????}
          ????}

          }


          package?com.demo.daemonThread;

          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 com.demo.daemonThread;

          public?class?Demo?{

          ????public?static?void?main(String[] args) {

          ????????System.out.println(Thread.currentThread().getName()
          ????????????????+"(isDaemon="+Thread.currentThread().isDaemon()+ ")");

          ????????Thread t1=new?MyThread("t1"); // 新建t1
          ????????Thread t2=new?MyDaemon("t2"); // 新建t2
          ????????t2.setDaemon(true); // 設(shè)置t2為守護(hù)線程
          ????????t1.start(); // 啟動(dòng)t1
          ????????t2.start(); // 啟動(dòng)t2
          ????}

          }


          運(yùn)行結(jié)果:


          main(isDaemon=false)
          t2(isDaemon=true), loop?0
          t2(isDaemon=true), loop?1
          t1(isDaemon=false), loop?0
          t2(isDaemon=true), loop?2
          t1(isDaemon=false), loop?1
          t2(isDaemon=true), loop?3
          t2(isDaemon=true), loop?4
          t1(isDaemon=false), loop?2
          t2(isDaemon=true), loop?5
          t2(isDaemon=true), loop?6
          t1(isDaemon=false), loop?3
          t2(isDaemon=true), loop?7
          t2(isDaemon=true), loop?8
          t2(isDaemon=true), loop?9
          t1(isDaemon=false), loop?4


          結(jié)果說明


          (01) 主線程main是用戶線程,它創(chuàng)建的子線程t1也是用戶線程。
          (02) t2是守護(hù)線程。在“主線程main”和“子線程t1”(它們都是用戶線程)執(zhí)行完畢,只剩t2這個(gè)守護(hù)線程的時(shí)候,JVM自動(dòng)退出。



          原文鏈接:cnblogs.com/xiaoxi/p/7133002.html


          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  怡红院免费成人电影 | 亚洲欧美性交网站在线观看 | 大香蕉伊人视频 | 黄色成年久久 | 淫秽视频在线 |