在 java 中守護線程和本地線程區別


java 中的線程分為兩種:守護線程(Daemon)和用戶線程(User)。
任何線程都可以設置為守護線程和用戶線程,通過方法 Thread.setDaemon(boolon);true 則把該線程設置為守護線程,反之則為用戶線程。Thread.setDaemon()必須在 Thread.start()之前調用,否則運行時會拋出異常。
兩者的區別:
唯一的區別是判斷虛擬機(JVM)何時離開,Daemon 是為其他線程提供服務,如果全部的 User Thread 已經撤離,Daemon 沒有可服務的線程,JVM 撤離。也可以理解為守護線程是 JVM 自動創建的線程(但不一定),用戶線程是程序創建的線程;比如 JVM 的垃圾回收線程是一個守護線程,當所有線程已經撤離,不再產生垃圾,守護線程自然就沒事可干了,當垃圾回收線程是 Java 虛擬機上僅剩的線程時,Java 虛擬機會自動離開。
擴展:Thread Dump 打印出來的線程信息,含有 daemon 字樣的線程即為守護進程,可能會有:服務守護進程、編譯守護進程、windows 下的監聽 Ctrl+break的守護進程、Finalizer 守護進程、引用處理守護進程、GC 守護進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM