java daemon是什么,讓我們一起了解一下。
daemon線程是為我們創建的用戶線程提供服務的線程,比如說jvm的GC等等。這樣的線程有一個非常明顯的特征,當用戶線程運行結束的時候,daemon線程將會自動退出。
daemon線程的特點是什么?
1、daemon線程創建的過程中需要先調用setDaemon方法進行設置,然后再啟動線程,否則會報出IllegalThreadStateException異常。
2、由于daemon線程的終止條件是當前是否存在用戶線程,所以我們不能指派daemon線程來進行一些業務操作,而只能服務用戶線程。
3、daemon線程創建的子線程任然是daemon線程。
那么Daemon線程與非Daemon線程有什么區別?
基本上沒有什么區別,不同之處就是當 java虛擬機中所有的非Daemon線程都停止運行之后,即使還存在有Daemon線程,java虛擬機也會退出。這是因為Daemon線程沒有了被守護者,所以其也就沒有繼續運行的必要了。
Daemon線程可以通過調用Thread.setDaemon(true)設置,但是該方法的調用必須是在線程啟動之前設置,否則將會拋出一個IllegalThreadStateException異常,這是因為一個正在運行中的線程是不能被設置成守護線程的。
Daemon線程被用作完成支持性的工作,但是在java虛擬機退出的時候Daemon線程中的finally代碼塊并不一定執行。
代碼示例:
public?class?TestDaemonThread?{ ????public?static?void?main(String[]?args)?{ ????????Thread?thread?=?new?Thread(new?Runnable()?{ ????????????@Override ????????????public?void?run()?{ ????????????????try?{ ????????????????????SleepUtils.second(1); ????????????????}finally?{ ????????????????????System.out.println("DaemonThread?finally?run."); ????????????????} ????????????????System.out.println(); ????????????} ????????},?"DaemonThread"); ????????//在線程執行前設置為daemon線程 ????????thread.setDaemon(true); ????????thread.start(); ????} }
以上就是小編今天的分享了,希望可以幫助到大家。