前台執行緒和後台執行緒的理解

2021-10-01 19:38:05 字數 1382 閱讀 1918

執行緒有兩種:前台執行緒和後台執行緒。

區別是:應用程式必須執行完所有的前台執行緒才可以退出;而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會自動結束。

主線程退出,不管後台執行緒有沒有執行完,都會把後台執行緒結束掉:

static void main(string args)

static void worker()

以上**執行結果為:

首先通過thread類建立了乙個執行緒物件,然後通過isbackground屬性指明該執行緒為後台執行緒,啟動了後台執行緒,主線程將會繼續執行。主線程執行完畢之後就會中止後台執行緒,然後使整個程式結束執行。所以worker不會執行。

但是最後有console.readkey();後台執行緒會執行,因為console.readkey()就是在等待,只要超過1秒即後台執行緒就會執行worker。

在真正的開發環境中我們不可能通過加一句console.readkey()來解決主線程退出後台執行緒還沒執行這個問題,當然,我們還有其他的方法。

方法一:將建立的執行緒設定為非後台執行緒(前台執行緒),只需要注釋backthread.isbackground = true即可;其實不設定isbackground屬性,預設為前台執行緒。只有前台程式全部執行完才會退出程式。所以子執行緒的**會被執行,但是這個時候一執行完馬上就退出程式了。

**和執行結果:

方法二:就是使主線程在後台執行緒執行完畢之後再執行,即使主線程也進入睡眠,且使睡眠時間比後台執行緒更長

**和執行結果:

方法三:使用函式join來實現,確保主線程會在後台執行緒結束後才開始執行

**和執行結果:

使用join的時候,主線程會等待後台執行緒結束之後才能繼續執行。另外join方法還有乙個引數,表示等待多長時間。如果設定了時間,等了這個時間還沒執行完就不會再等了。比如這裡設定為500,那麼就可能等不了子執行緒的執行了。

前台執行緒和後台執行緒

net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...

c 前台執行緒和後台執行緒

前台執行緒 在主線程執行結束後,若前台執行緒沒有執行完則會阻止主線程的關閉 後台執行緒 在主線程執行結束後,整個執行緒會結束 class threadsample public void countnumbers prints thread.currentthread.name,i static v...

(二)前台執行緒和後台執行緒

1.獲取執行緒狀態 2.終止執行緒 執行緒池執行的都是後台執行緒 執行緒池只能用於時間比較短的任務 static void main string args static void main string args 任務的層次結構 父任務等待子任務執行完成才完成 模擬線程爭用 using syste...