一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java線程-守護線程與用戶線程

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

2021-07-28 11:39情深見鹿 Java教程

這篇文章主要介紹了Java守護線程與用戶線程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

1. java 線程

1.1 守護線程與用戶線程

java 線程分為守護線程(daemonthread) 和 用戶線程(userthread)兩類.

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

1.2 守護線程特點

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

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

在開發java 守護線程時, 需要注意:

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

1.3 守護線程適用場景

針對于守護線程的特點,筆者認為,java 守護線程通常可用于開發一些為其它用戶線程服務的功能。比如說心跳檢測,事件監聽等。java 中最有名的守護進程當屬gc(垃圾回收)

2. java 守護線程開發

開發守護進程時需要注意兩點:

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

2.1 測試程序退出

  1. 注釋thread.setdaemon(true)時, 線程為用戶線程, 程序進行無線循環, 程序不終止。
  2. 設置thread.setdaemon(true)后, 線程變成守護線程, 程序直接終止, 僅輸出一行信息"main thread done"。 因為程序執行完system 語句之后, main 程序作為唯一的一個用戶線程執行結束了, jvm 中只剩下一個守護進程,所以jvm 便退出了。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class testthread {
 
 public static void main(string[] args) {
 
  ansytask ansytask = new ansytask();
 
  thread thread = new thread(ansytask);
 
  // 設置線程為異步線程
  // 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 測試守護線程中創建新的線程

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class testthread {
 
 public static void main(string[] args) throws interruptedexception {
 
  ansytask ansytask = new ansytask();
 
  thread thread = new thread(ansytask);
 
  // 設置線程為異步線程
  thread.setdaemon(true);
 
  // 啟動線程
  thread.start();
 
  // 給守護線程點兒執行時間
  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守護線程與用戶線程詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久精品免费视频 | 色老板视频在线 | 武侠艳妇屈辱的张开双腿 | 国产永久免费视频m3u8 | 大杳蕉在线影院在线播放 | 色一情一乱一伦 | 日b视频免费看 | 91国内精品久久久久影院优播 | 久久亚洲午夜牛牛影视 | 午夜国产精品福利在线观看 | 国产成人久视频免费 | 日本最新免费二区 | 国产精品视频第一页 | 日韩无砖2021特黄 | 99综合在线 | 免费成人在线观看视频 | aⅴ导航站| 亚洲欧美日韩精品久久亚洲区 | 天美传媒果冻传媒星空传媒 | 亚洲XXX午休国产熟女屁 | 高人先生免费观看全集 | 黄 色 成 年人在线 幻女free性俄罗斯第一次摘花 | 亚洲毛片免费看 | 奇米狠狠色| 美女被躁了在线观看视频 | 日日摸夜夜爽色婷婷91 | 欧美一区二区三区gg高清影视 | 涩色网| 天天干天天色综合网 | 公交车高h | 欧美草逼视频 | 无敌在线视频观看免费 | 91久久青青青国产免费 | 国产精品极品美女自在线 | 高清一区二区 | 精品视频免费在线观看 | 性欧洲女人18 | 性xxxxbbbbxxxx中国 | 大象传媒短视频网站 | 亚洲不卡视频在线 | 免费精品一区二区三区在线观看 |