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 程序/執行緒基礎 程序是系統中程式執行和資源分配的最小單位。每個程序都擁有自己的資料段,程式碼段和堆疊段。這就造成了程序在進行切換等操作時需要有比較負責的上下