@Test和main上運行的多線程


今天在看多線程,但是發現直接main方法運行的結果和@Test中運行的結果不一樣,十分懵逼,看了下規律,原因在於 @Test不會等待其他線程結束再去結束程序,只要@Test執行完成,那么這個程序也就結束了,而在main方法中運行時會區分子線程是否是守護線程

截取網上一段關於守護線程的解釋(個人感覺還是可以理解的)

Java分為兩種線程:用戶線程和守護線程

所謂守護線程是指在程序運行的時候在后台提供一種通用服務的線程,比如垃圾回收線程就是一個很稱職的守護者,並且這種線程並不屬於程序中不可或缺的部分。因 此,當所有的非守護線程結束時,程序也就終止了,同時會殺死進程中的所有守護線程。反過來說,只要任何非守護線程還在運行,程序就不會終止。

守護線程和用戶線程的沒啥本質的區別:唯一的不同之處就在於虛擬機的離開:如果用戶線程已經全部退出運行了,只剩下守護線程存在了,虛擬機也就退出了。 因為沒有了被守護者,守護線程也就沒有工作可做了,也就沒有繼續運行程序的必要了。

 

新建的子線程 setDaemon(false)默認false,可以不進行設置,這樣主線程就會等待其他子線程運行結束后退出,如果是true,就直接退出結束。

還有一個方法可以查看該線程是否是守護線程 isDaemon()  

至此,@Test和main上運行的多線程不一致算是表面上的解決了


免責聲明!

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



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