1. 程式人生 > >java守護執行緒的理解

java守護執行緒的理解

理解一 :  守護執行緒就是main同生共死,當main退出,它將終止,而普通執行緒是在任務執行結束才停止。

理解二 使用者執行緒:Java虛擬機器在它所有非守護執行緒已經離開後自動離開。守護執行緒則是用來服務使用者執行緒的,如果沒有其他使用者執行緒在執行,那麼就沒有可服務物件,也就沒有理由繼續下去。

例如:我們所熟悉的Java垃圾回收執行緒就是一個典型的守護執行緒,當我們的程式中不再有任何執行中的Thread,程式就不會再產生垃圾,垃圾回收器也就無事可做,所以當垃圾回收執行緒是Java虛擬機器上僅剩的執行緒時,Java虛擬機器會自動離開。

測試程式碼:

  執行緒

public class ThreadDemo implements Runnable {
     public void run() {
	  while (true) {
            for (int i = 1; i <= 100; i++) {
                System.out.println(i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
              }
	   }    
	}
}

public class Test {
	public static void main(String[] args) {
		Thread daemonThread = new Thread(new ThreadDemo());
		daemonThread.setName("測試thread");
		// 設定為守護程序
                daemonThread.setDaemon(true);
                daemonThread.start();
                System.out.println("isDaemon = " + daemonThread.isDaemon());
                Thread t = new Thread(new ThreadDemo());
                t.start();
	}
}


   因為有執行緒t 的存在,守護執行緒daemonThread 一直執行,當將下面程式碼註釋掉時,守護執行緒daemonThread ,隨著main結束,而結束。

Thread t = new Thread(new ThreadDemo());
t.start();


個人理解:當僅剩下的執行緒都是守護執行緒時,java虛擬機器會離開.也就是停止.

相關推薦

java守護執行理解

理解一 :  守護執行緒就是main同生共死,當main退出,它將終止,而普通執行緒是在任務執行結束才停止。 理解二: 使用者執行緒:Java虛擬機器在它所有非守護執行緒已經離開後自動離開。守護執行緒則是用來服務使用者執行緒的,如果沒有其他使用者執行緒在執行,那麼就沒有可服務物件,也就沒有理由繼續下去。 例

Java守護執行理解筆記

為了體會守護執行緒的作用,我做了一個下載檔案的demo,可以沒事用來測測網速什麼的,其特性如下 1、一共有三個執行緒,分別是主執行緒,下載執行緒,守護執行緒 2、主執行緒啟動下載執行緒和守護執行緒 3、下載執行緒連續下載100個檔案,如果出現異常自動捕獲並進入下一個檔案的下

Java執行理解

1、程序跟執行緒的區分 程序:程式或者任務的執行過程,持有資源和執行緒(程序是資源和執行緒的載體)。 執行緒:執行緒是系統中最小的執行單元,統一程序中有多個執行緒,執行緒共享程序資源。 執行緒的互動之互斥與同步: 2、Java對執行緒的支援 java對執行緒的支援體

java守護執行和非守護執行

Java 執行緒分為兩類:使用者執行緒(User Thread)和守護執行緒(Daemon Thread) 守護執行緒的作用是為其他執行緒提供服務,譬如垃圾回收器(GC),只要當前 JVM 例項中還有非守護執行緒執行,則守護執行緒就會一直工作下去,直至所有非守護執行緒結束,

Java 守護執行與非守護執行的區別

ublic   static   void   main   是在一個非守護執行緒中執行的,但是JVM中並不一定只有這個非守護執行緒,你可以在程式中啟動多個非守護執行緒,JVM同樣也會等待它們的退出。所以並非主執行緒(執行main方法的執行緒)退出就一定退出JVM。 守護

java執行-理解

基本執行緒類指的是Thread類,Runnable介面,Callable介面 Java多執行緒的建立及啟動 Java中執行緒的建立常見有如三種基本形式 1.繼承Thread類,重寫該類的run()方法。 public class MyThrea

JAVA執行理解到叢集分散式和網路設計的淺析

由於最近工作原因,很久沒有在CSDN上留下些啥,今天在這些篇文章,是關於java多執行緒的。 對於JAVA多執行緒的應用非常廣泛,現在的系統沒有多執行緒幾乎什麼也做不了,很多時候我們在何種場合如何應用多執行緒成為一種首先需要選擇的問題,另外關於java多執行緒的知識也是

Java守護執行注意事項

簡介 在學習多執行緒的時候經常看到守護執行緒,但是之前只是知道他是在主執行緒執行結束之後自動退出,今天看到了它的其他特性,一下做簡單介紹。 示例程式碼 public class DaemonSam

JAVA——守護執行或使用者執行(setDaemon)

class StopThread implements Runnable { private boolean flag = true; public synchronized voi

從 JVM 視角看看 Java 守護執行

Java 多執行緒系列第 7 篇。 這篇我們來講講執行緒的另一個特性:守護執行緒 or 使用者執行緒? 我們先來看看 Thread.setDaemon() 方法的註釋,如下所示。 Marks this thread as either a daemon thread or a user thread

二、JAVA執行:深入理解Thread建構函式(Thread、Runnable、守護執行、ThreadGroup)

本章主要介紹了所有與Thread有關的建構函式,執行緒的父子關係(並非繼承關係,而是一種包含關係),Thread和ThreadGroup之間的關係,Thread與虛擬機器棧的關係(學習這部分內容需要讀者有JVM的相關基礎,尤其是對棧記憶體要有深入的理解),最後還介紹了守護執行緒的概念、特點和使用場景

Java執行池原始碼深入理解

在前面的文章中,我們使用執行緒的時候就去建立一個執行緒,這樣實現起來非常簡便,但是就會有一個問題: 如果併發的執行緒數量很多,並且每個執行緒都是執行一個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷燬執行

白話理解java執行之join()方法

join字面意思是加入,我理解為插隊. 舉例:媽媽在炒菜,發現沒喲醬油了,讓兒子去打醬油,兒子打完醬油,媽媽炒完菜,全家一起吃 package cn.yh.thread01; /** * * 打醬油的例子 */ public class Demo03 { public stat

Java執行深度理解

深入理解多執行緒                                        

Java併發程式設計之執行生命週期、守護執行、優先順序和join、sleep、yield

Java併發程式設計中,其中一個難點是對執行緒生命週期的理解,和多種執行緒控制方法、執行緒溝通方法的靈活運用。這些方法和概念之間彼此聯絡緊密,共同構成了Java併發程式設計基石之一。 Java執行緒的生命週期 Java執行緒類定義了New、Runnable、Running Man、Blocked和Dead

Java併發程式設計(4):守護執行執行阻塞的四種情況

守護執行緒Java中有兩類執行緒:User Thread(使用者執行緒)、Daemon Thread(守護執行緒) 使用者執行緒即執行在前臺的執行緒,而守護執行緒是執行在後臺的執行緒。 守護執行緒作用是為其他前臺執行緒的執行提供便利服務,而且僅在普通、非守護執行緒仍然執行時才需要,比如垃圾回收執行緒就是一個

Java執行——執行優先順序與守護執行(Daemon Thread)

一、執行緒優先順序 每個執行緒都可以通過thread.setPriority()實現程序優先順序的設定。可設定的範圍在1-10之間,如果超過此範圍將丟擲異常throw new IllegalArgumentException()。每個執行緒的預設優先順序為5。 tips:即使將某個執行緒的優

Java執行程式設計 透徹理解ThreadLocal的原理

ThreadLocal可以說是筆試面試的常客,每逢面試基本都會問到,關於ThreadLocal的原理以及不正當的使用造成的OOM記憶體溢位的問題,值得花時間仔細研究一下其原理。這一篇主要學習一下ThreadLocal的原理,在下一篇會深入理解一下OOM記憶體溢位的原理和最佳實踐。 ThreadL

深入理解java執行(六)

關於java多執行緒的概念以及基本用法:java多執行緒基礎 6,單例模式與多執行緒 如何使單例模式遇到多執行緒是安全的這是下面要討論的內容 6.1,立即載入 立即載入就是在使用類的時候已經將物件建立完畢,例如String s = new Stri

深入理解Java執行(五)

關於java多執行緒的概念以及基本用法:java多執行緒基礎 5,定時器Timer JDK中Timer類主要是負責計劃任務的功能,也就是在指定的時間開始執行某一個任務,封裝任務的類是TimerTask類,執行計劃任務的程式碼要放進TimerTask的子類,因為它一個抽象