乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      初學(xué)者第62節(jié)之線程優(yōu)先級和守護(hù)詳解(四)

       太極混元天尊 2018-04-21
      Java 猿程之家 
      大型互聯(lián)網(wǎng)項目視頻
      公告通知

      本公眾專注于為廣大Java初學(xué)者和愛好者以及熱愛編程的菜鳥提供學(xué)習(xí)交流平臺,共同成長。 如果您發(fā)現(xiàn)什么錯誤、遺漏或不明的地方,可以通過文章下留言、群內(nèi)討論或私撩小編提出意見反饋,當(dāng)然小編會給這些奉獻(xiàn)的朋友分享Java 大型互聯(lián)網(wǎng)項目實戰(zhàn)視頻資料(不定期更新視頻資料) ,希望與大家一同成長?。?!

      一、線程優(yōu)先級

      線程可以劃分優(yōu)先級,優(yōu)先級分為1-10的10個等級,數(shù)字越大優(yōu)先級越高,優(yōu)先級較高的線程得到CPU資源較多,也就是CPU優(yōu)先執(zhí)行優(yōu)先級較高的線程對象中的任務(wù)(其實并不是這樣)。但是線程的優(yōu)先級仍然無法保障線程的執(zhí)行次序。只不過,優(yōu)先級高的線程獲取CPU資源的概率較大,優(yōu)先級低的并非沒機(jī)會執(zhí)行。

      二、優(yōu)先級具有繼承性

      線程是有繼承關(guān)系的,比如當(dāng)A線程中啟動B線程,那么B和A的優(yōu)先級將是一樣的。

      /**
      * 線程優(yōu)先級
      */

      public class TheadTest4 {
         public static void main(String[] args) {
             Thread thread = new Thread(new A());
             thread.start();
         }
      }

      class A implements Runnable {

         @Override
         public void run() {
             System.out.println('A的優(yōu)先級為:' + Thread.currentThread().getPriority());
             Thread thread = new Thread(new B());
             thread.start();
         }
      }

      class B implements Runnable {

         @Override
         public void run() {
             System.out.println('B的優(yōu)先級為:' + Thread.currentThread().getPriority());
         }
      }

      三、setPriority設(shè)置優(yōu)先級

                更改線程的優(yōu)先級。當(dāng)使用了setPriority設(shè)置了優(yōu)先級,但是線程的優(yōu)先級仍然無法保障線程的執(zhí)行次序。只不過,優(yōu)先級高的線程獲取CPU資源的概率較大,優(yōu)先級低的并非沒機(jī)會執(zhí)行。

      /**
      * 線程優(yōu)先級
      */

      public class TheadTest4 {
        public static void main(String[] args) {
            Thread thread1 = new Thread(new A());
            Thread thread2 = new Thread(new B());
            //將優(yōu)先級設(shè)置到最低
            thread1.setPriority(10);
            //將優(yōu)先級設(shè)置到最高
            thread2.setPriority(1);
            //線程啟動
            thread1.start();
            thread2.start();
        }
      }

      class A implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i 10 ; i++) {
                System.out.println('A的優(yōu)先級為:' + Thread.currentThread().getPriority());
            }
        }
      }

      class B implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i 10 ; i++) {
                System.out.println('B的優(yōu)先級為:' + Thread.currentThread().getPriority());
            }
        }
      }


      結(jié)果執(zhí)行了好幾次才出現(xiàn)的結(jié)果:

      A的優(yōu)先級為:10
      B的優(yōu)先級為:1
      A的優(yōu)先級為:10
      B的優(yōu)先級為:1
      A的優(yōu)先級為:10
      B的優(yōu)先級為:1
      A的優(yōu)先級為:10
      A的優(yōu)先級為:10
      A的優(yōu)先級為:10
      A的優(yōu)先級為:10
      A的優(yōu)先級為:10
      A的優(yōu)先級為:10
      B的優(yōu)先級為:1
      A的優(yōu)先級為:10
      B的優(yōu)先級為:1
      B的優(yōu)先級為:1
      B的優(yōu)先級為:1
      B的優(yōu)先級為:1
      B的優(yōu)先級為:1
      B的優(yōu)先級為:1

      這就表示優(yōu)先級低的線程不是非得優(yōu)先級高的線程執(zhí)行完畢之后才執(zhí)行的,這也可以說明線程就是隨機(jī)性的!

      四、守護(hù)線程

      守護(hù)線程是一種特殊的線程,它屬于是一種陪伴線程。簡單點(diǎn)說 java 中有兩種線程:用戶線程和守護(hù)線程可以通過isDaemon()方法來區(qū)別它們:如果返回false,則說明該線程是“用戶線程”;否則就是“守護(hù)線程”。用戶線程一般用于執(zhí)行用戶級任務(wù),而守護(hù)線程也就是“后臺線程”,一般用來執(zhí)行后臺任務(wù)。需要注意的是:Java虛擬機(jī)在“用戶線程”都結(jié)束后會退出,所以守護(hù)線程也會隨之結(jié)束。注意:主線程main是用戶線程。

      做一個小例子吧?。?!

      public class TheadTest4 {
         public static void main(String[] args) throws InterruptedException {
             Thread thread1 = new Thread(new A());
             //設(shè)置名稱為A
             thread1.setName('A...');
             //設(shè)置為守護(hù)線程
             thread1.setDaemon(true);
             thread1.start();

             Thread thread2 = new Thread(new A());
             //設(shè)置名稱為B
             thread2.setName('B...');
             thread2.start();
             Thread.sleep(3000);
             //直接中斷非守護(hù)線程
             thread2.interrupt();
             Thread.sleep(10000);
             System.out.println('程序結(jié)束!!!');
         }
      }

      class A implements Runnable {
         private int i;
         @Override
         public void run() {
             try {
                 while (true) {
                     i++;
                     System.out.println('線程名稱:'+Thread.currentThread().getName()+',i=' + i + ',是否為守護(hù)線程:' + Thread.currentThread().isDaemon());
                     Thread.sleep(1000);
                 }
             } catch (InterruptedException e) {
                 System.out.println('線程名稱:'+Thread.currentThread().getName()+'中斷線程了');
             }
         }
      }

      結(jié)果:

      線程名稱:A...,i=1,是否為守護(hù)線程:true
      線程名稱:B...,i=1,是否為守護(hù)線程:false
      線程名稱:A...,i=2,是否為守護(hù)線程:true
      線程名稱:B...,i=2,是否為守護(hù)線程:false
      線程名稱:B...,i=3,是否為守護(hù)線程:false
      線程名稱:A...,i=3,是否為守護(hù)線程:true
      線程名稱:B...中斷線程了
      線程名稱:A...,i=4,是否為守護(hù)線程:true
      線程名稱:A...,i=5,是否為守護(hù)線程:true
      線程名稱:A...,i=6,是否為守護(hù)線程:true
      線程名稱:A...,i=7,是否為守護(hù)線程:true
      線程名稱:A...,i=8,是否為守護(hù)線程:true
      線程名稱:A...,i=9,是否為守護(hù)線程:true
      線程名稱:A...,i=10,是否為守護(hù)線程:true
      線程名稱:A...,i=11,是否為守護(hù)線程:true
      線程名稱:A...,i=12,是否為守護(hù)線程:true
      線程名稱:A...,i=13,是否為守護(hù)線程:true
      程序結(jié)束!!!

      從上面的代碼可以看出來,B是用戶線程當(dāng)它中斷了之后守護(hù)線程還沒有結(jié)束,是因為主線程(用戶線程)還沒有結(jié)束,所以說明是所有的用戶線程結(jié)束之后守護(hù)線程才會結(jié)束。

      五、習(xí)題

      從以上的例子大家應(yīng)該還不知道守護(hù)線程到底有什么用處?。。∷袁F(xiàn)在為大家布置一個真實場景的習(xí)題。

      求:創(chuàng)建一個用戶線程是向一個目錄里面存儲文件,再啟動一個守護(hù)線程定時刪除這個目錄里面創(chuàng)建時間五秒前或者1分鐘前創(chuàng)建的文件。

      該需求大家如果不會可以到初學(xué)者交流群里討論

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多