欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程優(yōu)先級和守護線程原理解析

 更新時間:2020年03月24日 15:06:43   作者:平凡希  
這篇文章主要介紹了Java線程優(yōu)先級和守護線程原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

java 中的線程優(yōu)先級的范圍是1~10,默認的優(yōu)先級是5?!案邇?yōu)先級線程”會優(yōu)先于“低優(yōu)先級線程”執(zhí)行。

java 中有兩種線程:用戶線程和守護線程??梢酝ㄟ^isDaemon()方法來區(qū)別它們:如果返回false,則說明該線程是“用戶線程”;否則就是“守護線程”。用戶線程一般用于執(zhí)行用戶級任務,而守護線程也就是“后臺線程”,一般用來執(zhí)行后臺任務。需要注意的是:Java虛擬機在“用戶線程”都結(jié)束后會后退出。

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

每個線程都有一個優(yōu)先級?!案邇?yōu)先級線程”會優(yōu)先于“低優(yōu)先級線程”執(zhí)行。每個線程都可以被標記為一個守護進程或非守護進程。在一些運行的主線程中創(chuàng)建新的子線程時,子線程的優(yōu)先級被設置為等于“創(chuàng)建它的主線程的優(yōu)先級”,當且僅當“創(chuàng)建它的主線程是守護線程”時“子線程才會是守護線程”。

當Java虛擬機啟動時,通常有一個單一的非守護線程(該線程通過是通過main()方法啟動)。JVM會一直運行直到下面的任意一個條件發(fā)生,JVM就會終止運行:

(01) 調(diào)用了exit()方法,并且exit()有權(quán)限被正常執(zhí)行。

(02) 所有的“非守護線程”都死了(即JVM中僅僅只有“守護線程”)。

每一個線程都被標記為“守護線程”或“用戶線程”。當只有守護線程運行時,JVM會自動退出。

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

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

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);        // 設置t1的優(yōu)先級為1
    t2.setPriority(10);       // 設置t2的優(yōu)先級為10
    t1.start();           // 啟動t1
    t2.start();           // 啟動t2
  } 

}

運行結(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)先級是5。

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

三、守護線程的示例

下面是守護線程的示例。

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);       // 設置t2為守護線程
    t1.start();           // 啟動t1
    t2.start();           // 啟動t2
  } 

}

運行結(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是守護線程。在“主線程main”和“子線程t1”(它們都是用戶線程)執(zhí)行完畢,只剩t2這個守護線程的時候,JVM自動退出。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring與Struts整合之使用自動裝配操作示例

    Spring與Struts整合之使用自動裝配操作示例

    這篇文章主要介紹了Spring與Struts整合之使用自動裝配操作,結(jié)合實例形式詳細分析了Spring與Struts整合使用自動裝配具體操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-01-01
  • JAVA中List.addAll的基本語法與用法詳解

    JAVA中List.addAll的基本語法與用法詳解

    這篇文章主要給大家介紹了關(guān)于JAVA中List.addAll的基本語法與用法的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • SpringCloud之Feign示例詳解

    SpringCloud之Feign示例詳解

    本篇文章主要介紹了SpringCloud之Feign示例詳解,詳細的介紹了Feign簡介和使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java實現(xiàn)最小生成樹算法詳解

    Java實現(xiàn)最小生成樹算法詳解

    這篇文章主要介紹了如何在Java中實現(xiàn)最小生成樹算法,文中的示例代碼講解詳細,對我們學習Java有一定幫助,需要的可以參考一下
    2022-04-04
  • Java基礎第四篇 封裝與接口

    Java基礎第四篇 封裝與接口

    本文將對介紹Java 的封裝與接口進行介紹,將要封裝(encapsulation)對象的成員(成員包括數(shù)據(jù)成員和方法),從而只允許從外部調(diào)用部分的成員。利用封裝,我們可以提高對象的易用性和安全性。想具體了解的小伙伴請參考下面文章的內(nèi)容
    2021-09-09
  • java開源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain服務搭建

    java開源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain服務搭建

    這篇文章主要介紹了java開源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain的服務搭建步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 聊聊Mybatis反射之ObjectWrapper的使用

    聊聊Mybatis反射之ObjectWrapper的使用

    本文主要介紹了Mybatis反射之ObjectWrapper的使用,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解SpringCloud-OpenFeign組件的使用

    詳解SpringCloud-OpenFeign組件的使用

    這篇文章主要介紹了SpringCloud-OpenFeign組件的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Dubbo+zookeeper?最簡單的分布式搭建方案

    Dubbo+zookeeper?最簡單的分布式搭建方案

    這篇文章主要介紹了Dubbo+zookeeper?最簡單的分布式搭建,本例采用?dubbo+zookeeper?搭建分布式系統(tǒng),環(huán)境?jdk1.8,需要的朋友可以參考下
    2022-04-04
  • Java+OpenCV實現(xiàn)人臉檢測并自動拍照

    Java+OpenCV實現(xiàn)人臉檢測并自動拍照

    這篇文章主要為大家詳細介紹了Java+OpenCV實現(xiàn)人臉檢測,并調(diào)用筆記本攝像頭實時抓拍,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論