亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java測試守護線程的一段程序在Java7下失效

Java測試守護線程的一段程序在Java7下失效

慕尼黑8549860 2019-03-29 22:08:38
在看ThinkInJava,驗證其中的一則代碼,發現其在Java6或者Java8下都是正確的,但是在Java7下卻出現了異常,代碼如下:packagecom.mobile.concurrency;importjava.util.concurrent.TimeUnit;classADaemonimplementsRunnable{@Overridepublicvoidrun(){try{System.out.println("startingdaemon");TimeUnit.SECONDS.sleep(1);}catch(InterruptedExceptione){e.printStackTrace();}finally{System.out.println("Thisshouldalwaysrun");}}}publicclassDaemonsDontRunFinally{publicstaticvoidmain(String[]args){Threadt=newThread(newADaemon());t.setDaemon(true);t.start();//System.out.println(":");}}在java6,8下面都能輸出startingdaemon,但是java7卻是什么都不輸出,當我在main里加入輸出部分才輸出startingdaemon.不太了解這部分知識,求指教,謝謝=====update===多測試了幾次之后發現也并不是Java版本的問題,在7下面多測試幾次也還是會出現能打印出來的情況
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我覺得可能的原因。
因為主線程和你新開的線程運行的順序并不是確定的,當新的線程要輸出的時候,你的main線程可能已經退出了。由于你setDaemon(true)
Marksthisthreadaseitheradaemonthreadorauserthread.TheJavaVirtualMachineexitswhentheonlythreadsrunningarealldaemonthreads.
這樣就算你還有一個daemon線程,jvm也會退出,因為沒有普通的線程在運行,這樣可能導致你的daemon線程中的printf沒有輸出內容。
                            
查看完整回答
反對 回復 2019-03-29
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

因為你setDaemon(true)了啊,你這段代碼執行main方法的時候就剩下守護線程了,JVM在這種情況下可能選擇直接退出所以并不保證會執行完守護線程。
                            
查看完整回答
反對 回復 2019-03-29
  • 2 回答
  • 0 關注
  • 328 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號