最近看golang main函數(shù)結(jié)束汛骂,所有協(xié)程都被結(jié)束了
結(jié)論是這樣:A不是main程的情況下,在A程里開啟B程评腺,A程執(zhí)行完帘瞭,A程return之后,B程不受影響蒿讥,不會掛掉蝶念。所有子協(xié)程與main程同級的,與main程伴生
java主線程結(jié)束和子線程結(jié)束之間的關(guān)系
Main線程是個非守護線程芋绸,不能設(shè)置成守護線程媒殉。
這是因為,main線程是由java虛擬機在啟動的時候創(chuàng)建的摔敛。main方法開始執(zhí)行的時
候廷蓉,主線程已經(jīng)創(chuàng)建好并在運行了。對于運行中的線程马昙,調(diào)用Thread.setDaemon()會
拋出異常Exception in thread "main" java.lang.IllegalThreadStateException苦酱。
Main線程結(jié)束售貌,其他線程一樣可以正常運行
主線程,只是個普通的非守護線程疫萤,用來啟動應(yīng)用程序,不能設(shè)置成守護線程敢伸;除此之外扯饶,它跟其他非守護線程沒有什么不同。主線程執(zhí)行結(jié)束池颈,其他線程一樣可以正常執(zhí)行
Main線程結(jié)束尾序,其他線程也可以立刻結(jié)束,當且僅當這些子線程都是守護線程躯砰。
java虛擬機(相當于進程)退出的時機是:虛擬機中所有存活的線程都是守護線程每币。只要還有存活的非守護線程虛擬機就不會退出,而是等待非守護線程執(zhí)行完畢琢歇;反之兰怠,如果虛擬機中的線程都是守護線程,那么不管這些線程的死活java虛擬機都會退出