守护线程与非守护线程的区别
守護(hù)線程與非守護(hù)線程
最近在看多線程的Timer章節(jié),發(fā)現(xiàn)運用到了守護(hù)線程,感覺Java的基礎(chǔ)知識還是需要補(bǔ)充。
Java分為兩種線程:用戶線程和守護(hù)線程
所謂守護(hù)線程是指在程序運行的時候在后臺提供一種通用服務(wù)的線程,比如垃圾回收線程就是一個很稱職的守護(hù)者,并且這種線程并不屬于程序中不可或缺的部分。因 此,當(dāng)所有的非守護(hù)線程結(jié)束時,程序也就終止了,同時會殺死進(jìn)程中的所有守護(hù)線程。反過來說,只要任何非守護(hù)線程還在運行,程序就不會終止。
守護(hù)線程和用戶線程的沒啥本質(zhì)的區(qū)別:唯一的不同之處就在于虛擬機(jī)的離開:如果用戶線程已經(jīng)全部退出運行了,只剩下守護(hù)線程存在了,虛擬機(jī)也就退出了。 因為沒有了被守護(hù)者,守護(hù)線程也就沒有工作可做了,也就沒有繼續(xù)運行程序的必要了。
將線程轉(zhuǎn)換為守護(hù)線程可以通過調(diào)用Thread對象的setDaemon(true)方法來實現(xiàn)。在使用守護(hù)線程時需要注意一下幾點:
(1) thread.setDaemon(true)必須在thread.start()之前設(shè)置,否則會跑出一個IllegalThreadStateException異常。你不能把正在運行的常規(guī)線程設(shè)置為守護(hù)線程。
(2) 在Daemon線程中產(chǎn)生的新線程也是Daemon的。
(3) 守護(hù)線程應(yīng)該永遠(yuǎn)不去訪問固有資源,如文件、數(shù)據(jù)庫,因為它會在任何時候甚至在一個操作的中間發(fā)生中斷。
?
?
使用:
? ? ? ? ?Runnable tr=new TestRunnable();??
??????? Thread thread=new Thread(tr);??
? ? ? ? ?thread.setDaemon(true); //設(shè)置守護(hù)線程??
??????? thread.start(); //開始執(zhí)行分進(jìn)程??
轉(zhuǎn)載于:https://www.cnblogs.com/lemon-flm/p/8086938.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的守护线程与非守护线程的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现搜索功能
- 下一篇: ADO.NET复习总结(4)--访问Sq