Daemon執行緒和Join執行緒

2021-09-23 19:19:30 字數 1571 閱讀 5067

daemon執行緒稱為守護執行緒(非常喜歡這個名字)。執行緒一旦被設定為守護執行緒,當非守護執行緒結束,守護執行緒即使沒有執行完,也必須隨之全部結束。例如我們曾經玩兒過的坦克大戰,一旦守護的老巢完蛋了,其它守護坦克沒死也要結束。

daemon執行緒的實質作用是為主執行緒其他執行緒的執行提供服務。user thread執行緒和daemon thread守護執行緒本質上來說去沒啥區別的,唯一的區別之處就在虛擬機器的離開:如果user thread全部撤離,那麼daemon thread也就沒啥執行緒好服務的了,所以虛擬機器也就退出了。

設定守護執行緒方法:public final void setdaemon(boolean on) ;但是有幾點需要注意:

thread.setdaemon(true)必須在thread.start()之前設定,否則會丟擲illegalthreadstateexception異常。因為我們不能夠將正在執行的常規執行緒設為守護執行緒。

在daemon執行緒中產生的新執行緒也是daemon的。

不是所有的應用都可以分配給daemon執行緒來進行服務,比如讀寫操作或者計算邏輯。我們必須防止在daemon thread還沒來的及進行操作時,虛擬機器可能已經退出了。

(1)待設定為daemon執行緒的執行緒類

//實現runnable介面

public class daemondemo implements runnable

}}

(2)測試類

public class daemondemotest 

}}

執行結果:main執行緒中的10次迴圈結束時,兩個沒有執行結束的守護執行緒都會隨之結束。

當執行緒被呼叫了join()方法,那麼其它執行緒必須等待,直到本執行緒結束,其它執行緒才能執行。join在英文中解釋為合併、加入,我更喜歡稱之為阻塞執行緒,程式必須首先執行完阻塞執行緒才能夠去執行其他執行緒。

join執行緒的作用:在很多情況下,主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束(正如我們上面的例子),但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個時候就要用到join()方法了。

(1)待設定執行緒類

public class joindemo implements runnable 

}}

(2)測試類

public class joindemotest  catch (interruptedexception e) 

t1.start();

t3.start();

}}

執行結果:首先結束t2執行緒之後才會執行t1和t3執行緒。

守護 Daemon 執行緒和使用者 User 執行緒

使用者 user 執行緒 可以認為是系統的工作執行緒,它會完成整個系統的業務操作 守護 daemon 執行緒 public class threaddemo implements runnable catch interruptedexception e system.out.println thr...

Daemon後台執行緒

所謂後台執行緒 daemon 是指程式在執行時提供的一種通用執行緒服務,這種執行緒並不屬於程式中不可或缺的部分。因此,所有的非後台執行緒結束後,程式也就會終結所有的執行緒,同時會殺死所有的後台現場。也就是說,程式中只要有後台執行緒還在執行,那麼程式就不會終止。比如,執行main 方法就是乙個非後台執...

執行緒控制 join執行緒

在我們做專案的時候時常會有這樣的一種需求 我們需要執行兩個方法,乙個方法要等另乙個方法執行完才能執行,這樣的狀況放到多執行緒中要怎麼實現呢?今天就來看看多執行緒中的join方法。我們的均方法通常是把乙個大問題分成許多小問題,每個小問題分配乙個執行緒,當所有的小問題都得到處理後,在呼叫主線程來進一步操...