1. 程式人生 > >java守護執行緒和非守護執行緒

java守護執行緒和非守護執行緒

Java 執行緒分為兩類:使用者執行緒(User Thread)和守護執行緒(Daemon Thread)

守護執行緒的作用是為其他執行緒提供服務,譬如垃圾回收器(GC),只要當前 JVM 例項中還有非守護執行緒執行,則守護執行緒就會一直工作下去,直至所有非守護執行緒結束,守護執行緒隨 JVM 一起結束。

除 JVM 內部的守護執行緒外,使用者可以通過以下方法設定守護執行緒:

public final void setDaemon(boolean on)
  • 1
  • 1

可以通過以下方法查詢執行緒是否為守護執行緒:

public final boolean isDaemon()
  • 1
  • 1

關於守護執行緒的幾個要點:

1 setDaemon 方法必須在 thread.start() 之前設定,否則會丟擲 java.lang.IllegalThreadStateException 異常,不能將正在執行的常規執行緒設定為守護執行緒

public static void main(String[] args) {
    Thread thread = new Thread();
    thread.start();
    thread.setDaemon(true);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

執行結果:

這裡寫圖片描述

2 在 Daemon 執行緒中產生的新執行緒也是 Daemon 的

class CustomThread
extends Thread {
@Override public void run() { Thread thread = new Thread(); System.out.println("Sub Thread : " + thread.isDaemon()); } } public static void main(String[] args) { Thread thread = new CustomThread(); System.out.println("Thread : " + thread.isDaemon()); thread.setDaemon(true
); System.out.println("Thread : " + thread.isDaemon()); thread.start(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

執行結果:

這裡寫圖片描述

3 不是所有的應用都可以分配給 Daemon 執行緒來進行服務,比如讀寫操作或者計算邏輯,因為在 Daemon 執行緒還沒來的及進行操作時虛擬機器可能已經退出了

class CustomThread extends Thread {
    @Override
    public void run() {
        FileOutputStream outputStream = null;
        try {
            Thread.sleep(3000);
            File file = new File("daemon.txt");
            outputStream = new FileOutputStream(file);
            outputStream.write("daemon".getBytes());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public static void main(String[] args) {
    Thread thread = new CustomThread();
    thread.setDaemon(true);
    thread.start();
}
  • 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
  • 28
  • 29
  • 30
  • 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
  • 28
  • 29
  • 30

以上程式碼中執行緒功能是向工程根目錄的“daemon.txt”檔案寫入字串“daemon”,實際執行結果發現並未成功寫入,且未報任何錯誤,原因是寫入檔案的執行緒被設定為守護執行緒,該執行緒還在 sleep 過程中時所有使用者執行緒就全部結束了,守護執行緒也會隨著 JVM 一起退出。

示例2:

class CustomThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Daemon Thread : " + i);
        }
    }
}

public static void main(String[] args) {
    Thread daemonThread = new CustomThread();
    daemonThread.setDaemon(true);
    Thread userThread = new Thread();
    daemonThread.start();
    userThread.start();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

執行結果:

這裡寫圖片描述

從執行結果可以看出,守護執行緒並未執行完成所有迴圈就結束了,因為使用者執行緒在守護執行緒執行迴圈的過程中就已全部結束,守護執行緒也隨著 JVM 一起結束

相關推薦

Java守護執行守護執行

一、守護執行緒         java分為兩種執行緒:使用者執行緒和守護執行緒         守護執行緒是指在程式執行的時候在後臺提供一種通用服務的執行緒,比如垃圾回收執行緒就是一個很稱職的守護者,並且這種執

java守護執行守護執行

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

Java執行守護執行守護執行

本文內容大多基於官方文件和網上前輩經驗總結,經過個人實踐加以整理積累,僅供參考。 Java 執行緒分為兩類:使用者執行緒(User Thread)和守護執行緒(Daemon Thread) 守護執行緒的作用是為其他執行緒提供服務,譬如垃圾回收器(GC),

java執行_守護執行守護執行

基本概念 守護執行緒:和主執行緒一起結束的執行緒,叫守護執行緒。 非守護執行緒:主執行緒的結束不影響執行緒的執行的執行緒,也叫使用者執行緒。 如何將一個執行緒t變成守護執行緒 呼叫t.setDaemon(true)方法將非守護執行緒變為守護執行緒。

Android UI執行UI執行

public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = loadImageFromNetwork("http://

5.UI執行UI執行的互動方式

  一般來說有三種方式:      1.Activity.unOnUiThread(Runnable)      如果當前執行緒是UI Thread,立馬執行action.run方法;否則將Runnable傳送到UI Thread的event 佇列中。    

(轉)Java中的守護執行 Java守護執行守護執行

Java的守護執行緒與非守護執行緒   守護執行緒與非守護執行緒 最近在看多執行緒的Timer章節,發現運用到了守護執行緒,感覺Java的基礎知識還是需要補充。 Java分為兩種執行緒:使用者執行緒和守護執行緒 所謂守護執行緒是指在程式執行的時候在後臺提供一

Java守護執行守護執行

守護執行緒與非守護執行緒 最近在看多執行緒的Timer章節,發現運用到了守護執行緒,感覺Java的基礎知識還是需要補充。 Java分為兩種執行緒:使用者執行緒和守護執行緒 所謂守護執行緒是指在程式執行的時候在後臺提供一種通用服務的執行緒,比如垃圾回收執行緒就是一個很稱職的守護者,並且這種執行緒並不屬於程式中不

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

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

守護執行守護執行簡介addShutdownHook方法使用

  1,首先什麼是守護執行緒,什麼是非守護執行緒呢 下面是網上資料總結如下: Java有兩種Thread:“守護執行緒Daemon”(守護執行緒)與“使用者執行緒User”(非守護執行緒)。 從字面上我們很容易將守護執行緒理解成是由虛擬機器(virtual machine)

java守護執行守護執行(使用者執行

Java的執行緒機制,在Java中有兩類執行緒:User Thread(使用者執行緒)、Daemon Thread(守護執行緒) 估計學過Unix開發但是沒有細緻學習Java的同學們會疑惑了,作業系統裡面是沒有所謂的守護執行緒的概念,只有守護程序一說,但是Java語言機

執行守護執行守護執行

主執行緒 main,但不是守護執行緒。 守護執行緒 是指在程式執行的時候在後臺提供一種通用服務的執行緒。如gc。 非守護執行緒 也叫使用者執行緒,由使用者建立。 關係: 主執行緒和守護執行緒一起銷燬; 主執行緒和非守護執行緒互不影響。 例如: package

守護執行守護執行

Java分為兩種執行緒:使用者執行緒和守護執行緒所謂守護執行緒是指在程式執行的時候在後臺提供一種通用服務的執行緒,比如垃圾回收執行緒就是一個很稱職的守護者,並且這種執行緒並不屬於程式中不可或缺的部分。因 此,當所有的非守護執行緒結束時,程式也就終止了,同時會殺死程序中的所有守

Java(三)併發控制5.繼承建立執行實現建立執行之間的區別

這是使用繼承建立的執行緒 class Person extends Thread { private int num=50; public Person(String name) { super(name); } public void run()

java守護線程與守護線程

細致 相關信息 控制 理解 start read 取出 作者 一點 最近重新研究Java基礎知識,發現以前太多知識知識略略帶過了,比較說Java的線程機制,在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護線程) ,(PS:以前忽略

VS2010/MFC入門程式設計十七(多執行的建立,包括工作執行使用者介面執行

1.MFC多執行緒簡介 MFC對多執行緒進行了一層簡單的封裝,在Visual C++中每個執行緒都是從CWinThread類繼承而來的。每一個應用程式的執行都有一個主執行緒,這個主執行緒也是從CWinThread類繼承而來的。可以利用CWinThread物件建立應用程式執行的其它執行緒。 MFC用CW

MFC:多執行網路多執行程式設計舉例

<span style="font-size:14px;"> <span style="white-space:pre"> </span>多執行緒程式設計簡例: HANDLE CreateThread( LPS

核心級執行 使用者級執行

  從執行緒實現的角度看,執行緒可以分成使用者級執行緒,核心級執行緒和輕量級執行緒。   在核心級執行緒的實現中,執行緒管理的所有工作由作業系統核心來做,核心專門提供API供開發者使用,應用程式區不需要有執行緒管理的程式碼。核心級執行緒的優點:在多處理器上,核心能排程同

阻塞執行阻塞執行

阻塞執行緒:A,B執行緒有一個公共的資源,比如說變數params,當A訪問params時,給params加鎖,而這時B要訪問params時,它只有等待A釋放params鎖時,才可以訪問; 非阻塞執行緒:A,B執行緒有一個公共的資源,比如說變數params,當A訪問param

使用者級執行核心級執行0

轉自:http://www.2ndmoon.net/weblog/?p=603 一、linux 程序/執行緒基礎         程序是系統中程式執行和資源分配的最小單位。每個程序都擁有自己的資料段,程式碼段和堆疊段。這就造成了程序在進行切換等操作時需要有比較負責的上下