最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java線程-守護線程與用戶線程

 更新時間:2019年04月02日 15:35:10   作者:情深見鹿  
這篇文章主要介紹了Java守護線程與用戶線程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

干java 開發(fā)這么多年, 之前一直沒留意java 進程還區(qū)分守護進程和用戶進程。守護進程這個概念最早還是在linux系統(tǒng)中接觸的,直到近期使用java開發(fā)心跳檢測功能時,使用Timer時才發(fā)現(xiàn)原來java也有守護線程的概念。

1. Java 線程

1.1 守護線程與用戶線程

Java 線程分為守護線程(DaemonThread) 和 用戶線程(UserThread)兩類.

  1. 通常情況下,我們使用Thread 創(chuàng)建的線程在默認情況下都屬于用戶線程, 當在啟動線程之前, 執(zhí)行thread.setDaemon(true)時, 線程會變成守護線程。
  2. 其實在本質(zhì)上,用戶線程和守護線程并沒有太大區(qū)別,唯一的區(qū)別就是會影響虛擬機的退出(程序的終止)。當jvm中只剩下守護線程時,虛擬機會退出,及程序終止;而當jvm中至少擁有一個用戶線程時,jvm都不會退出。

1.2 守護線程特點

Java 中的守護線程和linux 中的守護進程還是有些區(qū)別的, linux 守護進程時系統(tǒng)級別的, 當系統(tǒng)退出時, 才會終止. 而java 中的守護線程時jvm 級別的, 當jvm中無任何用戶進程時, 守護進程銷毀, jvm 退出, 程序終止. 筆者認為java 守護進程的最主要的特點有:

  1. 守護進程是運行在程序后臺的線程
  2. 守護進程創(chuàng)建的進程,依然時守護進程
  3. 守護進程不會影響jvm的退出,當jvm只剩余守護進程時,jvm 進行退出
  4. 守護進行在jvm退出時,自動銷毀

在開發(fā)java 守護線程時, 需要注意:

  1. 在線程啟動之前, 及執(zhí)行thread.start() 方法前, 設(shè)置thread.setDemon(true);
  2. 在守護線程中啟動的子線程也是守護線程
  3. 守護線程不建議進行寫操作, 因為守護進程隨時可能結(jié)束。

1.3 守護線程適用場景

針對于守護線程的特點,筆者認為,java 守護線程通??捎糜陂_發(fā)一些為其它用戶線程服務(wù)的功能。比如說心跳檢測,事件監(jiān)聽等。Java 中最有名的守護進程當屬GC(垃圾回收)

2. java 守護線程開發(fā)

開發(fā)守護進程時需要注意兩點:

  1. 必須在線程啟動之前,即執(zhí)行thread.start()方法前, 執(zhí)行thread.setDaemon(true) 方法,否則會拋出異常IllegalThreadStateException
  2. 守護線程中創(chuàng)建的線程也是守護線程

2.1 測試程序退出

  1. 注釋thread.setDaemon(true)時, 線程為用戶線程, 程序進行無線循環(huán), 程序不終止。
  2. 設(shè)置thread.setDaemon(true)后, 線程變成守護線程, 程序直接終止, 僅輸出一行信息"main thread done"。 因為程序執(zhí)行完system 語句之后, main 程序作為唯一的一個用戶線程執(zhí)行結(jié)束了, jvm 中只剩下一個守護進程,所以jvm 便退出了。
public class TestThread {

 public static void main(String[] args) {

  AnsyTask ansyTask = new AnsyTask();

  Thread thread = new Thread(ansyTask);

  // 設(shè)置線程為異步線程
  // thread.setDaemon(true);

  // 啟動線程
  thread.start();
  
  System.out.println("main thread done");
 }
}

class AnsyTask implements Runnable{

 @Override
 public void run() {
  while (true){
   System.out.println(LocalDateTime.now() + "-hello,thread");
  }
 }
}

2.2 測試守護線程中創(chuàng)建新的線程

測試會發(fā)現(xiàn), 默認情況下, 守護線程創(chuàng)建的子線程依然是守護線程,用戶創(chuàng)建的守護線程依然時用戶線程。也可以在創(chuàng)建子線程時通過setDaemon()方法修改.

public class TestThread {

 public static void main(String[] args) throws InterruptedException {

  AnsyTask ansyTask = new AnsyTask();

  Thread thread = new Thread(ansyTask);

  // 設(shè)置線程為異步線程
  thread.setDaemon(true);

  // 啟動線程
  thread.start();

  // 給守護線程點兒執(zhí)行時間
  Thread.sleep(1000l);
 }
}

class AnsyTask implements Runnable{

 @Override
 public void run() {
  Thread thread = new Thread("subThread");
  System.out.println(thread.getName() + " is daemon:" + thread.isDaemon());
 }
}

以上所述是小編給大家介紹的Java守護線程與用戶線程詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java 泛型總結(jié)(一):基本用法與類型擦除

    Java 泛型總結(jié)(一):基本用法與類型擦除

    本文主要介紹了Java泛型的使用以及類型擦除相關(guān)的問題。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • SpringCloud Sleuth實現(xiàn)分布式請求鏈路跟蹤流程詳解

    SpringCloud Sleuth實現(xiàn)分布式請求鏈路跟蹤流程詳解

    這篇文章主要介紹了SpringCloud Sleuth實現(xiàn)分布式請求鏈路跟蹤流程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • SpringBoot通過構(gòu)造函數(shù)依賴注入實現(xiàn)過程

    SpringBoot通過構(gòu)造函數(shù)依賴注入實現(xiàn)過程

    Spring Boot推薦構(gòu)造函數(shù)注入替代@Autowired,避免編輯器警告,使用@AllArgsConstructor生成全屬性構(gòu)造函數(shù),但通過final關(guān)鍵字可優(yōu)化,僅生成需注入字段的構(gòu)造函數(shù),減少冗余
    2025-08-08
  • java8?Stream大數(shù)據(jù)量List分批處理切割方式

    java8?Stream大數(shù)據(jù)量List分批處理切割方式

    這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 淺談Java基準性能測試之JMH

    淺談Java基準性能測試之JMH

    JMH是Java Microbenchmark Harness的簡稱,一個針對Java做基準測試的工具。想準確的對一段代碼做基準性能測試并不容易,因為JVM層面在編譯期、運行時對代碼做很多優(yōu)化,當代碼塊處于整個系統(tǒng)中運行時并不一定會生效,產(chǎn)生錯誤的基準測試結(jié)果,這個問題就是JMH要解決的
    2021-06-06
  • Java?Stream流的常見生成和操作方法總結(jié)

    Java?Stream流的常見生成和操作方法總結(jié)

    從Java1.8開始提出了Stream流的概念,本文將通過示例為大家詳細講解一下Stream流的常見生成和操作方法,感興趣的小伙伴可以了解一下
    2022-09-09
  • Spring框架構(gòu)造注入操作實戰(zhàn)案例

    Spring框架構(gòu)造注入操作實戰(zhàn)案例

    這篇文章主要介紹了Spring框架構(gòu)造注入操作,結(jié)合具體實例形式分析了spring框架構(gòu)造輸入的相關(guān)定義與使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • 一次排查@CacheEvict注解失效的經(jīng)歷及解決

    一次排查@CacheEvict注解失效的經(jīng)歷及解決

    這篇文章主要介紹了一次排查@CacheEvict注解失效的經(jīng)歷及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring?Boot2.6.0新特性之默認禁止循環(huán)引用

    Spring?Boot2.6.0新特性之默認禁止循環(huán)引用

    Spring?Boot2.6.0為我們帶來很多好用的新特性/改進,這篇文章主要給大家介紹了關(guān)于Spring?Boot2.6.0新特性之默認禁止循環(huán)引用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Java并發(fā)工具類Phaser詳解

    Java并發(fā)工具類Phaser詳解

    這篇文章主要介紹了Java并發(fā)工具類Phaser詳解,Phaser(階段協(xié)同器)是一個Java實現(xiàn)的并發(fā)工具類,用于協(xié)調(diào)多個線程的執(zhí)行,它提供了一些方便的方法來管理多個階段的執(zhí)行,可以讓程序員靈活地控制線程的執(zhí)行順序和階段性的執(zhí)行,需要的朋友可以參考下
    2023-11-11

最新評論

云安县| 烟台市| 兴和县| 沛县| 沛县| 星座| 巩留县| 青海省| 连平县| 克山县| 连南| 曲松县| 柯坪县| 巫山县| 油尖旺区| 察隅县| 辉南县| 信阳市| 伊宁市| 杭锦旗| 海林市| 文安县| 靖宇县| 城固县| 青河县| 高台县| 宣恩县| 贵州省| 湘潭市| 磐安县| 利川市| 南涧| 英山县| 鞍山市| 广南县| 巨野县| 永宁县| 平果县| 宽城| 临澧县| 海兴县|