Java Daemon线程
生活随笔
收集整理的這篇文章主要介紹了
Java Daemon线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 所謂守護線程就是運行在程序后臺的線程,程序的主線程Main(比方java程序一開始啟動時創建的那個線程)不會是守護線程?
2.Daemon thread在Java里面的定義是,如果虛擬機中只有Daemon thread在運行,則虛擬機退出。?
?虛擬機中可能會同時有很多個線程在運行,只有當所有的非守護線程都結束的時候,虛擬機的進程才會結束,不管在運行的線程是不是main()線程。 3.Main主線程結束了(Non-daemon thread),如果此時正在運行的其他threads是daemonthreads,JVM會使得這個threads停止,JVM也停下
??如果此時正在運行的其他threads有Non-daemonthreads,那么必須等所有的Non daemon線程結束了,JVM才會停下來 4.總之,必須等所有的Non-daemon線程都運行結束了,只剩下daemon的時候,JVM才會停下來,注意Main主程序是Non-daemon 線程
默認產生的線程全部是Non-daemon線程。
5.JVM的資源回收線程就是這類線程。
6.在該類線程中產生的其他線程不用設置,默認都是守護線程。
Thread.setDaemon()用法使用:
2.Daemon thread在Java里面的定義是,如果虛擬機中只有Daemon thread在運行,則虛擬機退出。?
?虛擬機中可能會同時有很多個線程在運行,只有當所有的非守護線程都結束的時候,虛擬機的進程才會結束,不管在運行的線程是不是main()線程。 3.Main主線程結束了(Non-daemon thread),如果此時正在運行的其他threads是daemonthreads,JVM會使得這個threads停止,JVM也停下
??如果此時正在運行的其他threads有Non-daemonthreads,那么必須等所有的Non daemon線程結束了,JVM才會停下來 4.總之,必須等所有的Non-daemon線程都運行結束了,只剩下daemon的時候,JVM才會停下來,注意Main主程序是Non-daemon 線程
默認產生的線程全部是Non-daemon線程。
5.JVM的資源回收線程就是這類線程。
6.在該類線程中產生的其他線程不用設置,默認都是守護線程。
Thread.setDaemon()用法使用:
1. setDaemon需要在start方法調用之前使用
2. 線程劃分為用戶線程和后臺(daemon)進程,setDaemon將線程設置為后臺進程
3. 如果jvm中都是后臺進程,當前jvm將exit。(隨之而來的,所有的一切煙消云散,包括后臺線程啦)
4. 主線程結束后,
??????1)用戶線程將會繼續運行
?????2) 如果沒有用戶線程,都是后臺進程的話,那么jvm結束
另外:
setDaemon方法把java的線程設置為守護線程,此方法的調用必須在線程啟動之前執行。只有在當前jvm中所有的線程都為守護線程時,jvm才會退出。
如果創建的線程沒有顯示調用此方法,這默認為用戶線程。
實例如下:
1 import java.io.IOException; 2 3 public class DaemonThreadTest extends Thread{ 4 5 publicDaemonThreadTest() { 6 } 7 8 public voidrun(){ 9 for(int i = 1; i <= 100;i++){ 10 try{ 11 Thread.sleep(100); 12 13 } catch (InterruptedException ex){ 14 ex.printStackTrace(); 15 } 16 System.out.println(i); 17 } 18 } 19 publicstatic void main(String [] args){ 20 DaemonThreadTest test = newDaemonThreadTest(); 21 // 如果不設置daemon,那么線程將輸出100后才結束 22 test.setDaemon(true); //在test未結束前,執行下面的輸入操作,則test終止執行,因為jvm中只剩下守護線程時會終止 23 test.start(); 24 System.out.println("isDaemon = " +test.isDaemon()); 25 try { 26 System.in.read(); //接受輸入,使程序在此停頓,一旦接收到用戶輸入,main線程結束,守護線程自動結束 27 } catch (IOException ex) { 28 ex.printStackTrace(); 29 } 30 System.out.print(Thread.currentThread().getName()+"結束"); 31 } 32 }?
轉載于:https://www.cnblogs.com/WayneZeng/archive/2013/05/04/3059052.html
總結
以上是生活随笔為你收集整理的Java Daemon线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中的位操作(4)--判断整数是否为
- 下一篇: JNI学习开始篇 基础知识 数据映射及学