所謂後台執行緒(daemon),是指程式在執行時提供的一種通用執行緒服務,這種執行緒並不屬於程式中不可或缺的部分。因此,所有的非後台執行緒結束後,程式也就會終結所有的執行緒,同時會殺死所有的後台現場。也就是說,程式中只要有後台執行緒還在執行,那麼程式就不會終止。比如,執行main()方法就是乙個非後台執行緒。
public class daemonthread implements runnable catch (interruptedexception e) }}
public static void main(string args) throws interruptedexception
system.out.println("all dacmoi start!");
timeunit.milliseconds.sleep(1000);}}
這裡的thread.setdaemon(true);就是把乙個執行緒的daemon屬性設定為true,那麼系統就會認為她是乙個後台執行緒。當main()方法執行完畢後,就一切終止了,包括後台執行緒。但是如果在main()方法中最後一句加上sleep讓它休眠,那麼你就會看到後台執行緒開始執行。這樣就是顯式的建立了乙個後台執行緒。同時可以使用threadfactory隱式的建立後台執行緒。
public class daemonthreadfactory implements threadfactory
/*** 後台執行緒,main方法結束後,便馬上結束
* @param args
* @throws interruptedexception
*/public static void main(string args) throws interruptedexception
service.shutdown();
system.out.println("test");
timeunit.milliseconds.sleep(167);}}
daemonthreadfactory 要使用執行緒池executors來配合使用,唯一的差異化就是把你提供的執行緒都隱式的設定為deaemon=true,每個靜態的executorservice 都可以接受乙個threadfactory物件。而這個物件將被預設的建立新的執行緒。也可以通過isdaemon()判斷乙個執行緒是否是乙個後台執行緒如果乙個執行緒被設定為後台執行緒,但是它裡面派生了很多子執行緒,那麼派生的子執行緒也會設定為後台執行緒。
後台執行緒中若是存在finally()方法,猜會不會執行呢??參考位址答案是不會執行,因為即便finally這種行為是正確的,但是情況依然如此,當最後乙個後台執行緒終止時,後台執行緒會突然終止,因此一旦main()結束,那麼所有的執行緒都將結束。而不會有你的希望出現的確認形式。因此,你不能優雅的關閉所有的後台執行緒,使用exectuor是一種更好的方式。
Mongodb後台daemon方式啟動
mongodb可以通過命令列方式和配置檔案的方式來啟動,具體命令如下 命令列 shell root localhost mongodb bin mongod dbpath data db 配置檔案 shell root localhost mongodb bin mongod f mongodb.c...
Daemon執行緒和Join執行緒
daemon執行緒稱為守護執行緒 非常喜歡這個名字 執行緒一旦被設定為守護執行緒,當非守護執行緒結束,守護執行緒即使沒有執行完,也必須隨之全部結束。例如我們曾經玩兒過的坦克大戰,一旦守護的老巢完蛋了,其它守護坦克沒死也要結束。daemon執行緒的實質作用是為主執行緒其他執行緒的執行提供服務。user...
守護 Daemon 執行緒和使用者 User 執行緒
使用者 user 執行緒 可以認為是系統的工作執行緒,它會完成整個系統的業務操作 守護 daemon 執行緒 public class threaddemo implements runnable catch interruptedexception e system.out.println thr...