前台執行緒和後台執行緒

2021-06-27 05:29:20 字數 1081 閱讀 7441



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

.net環境使用thread建立的執行緒預設情況下是前台執行緒,即執行緒屬性isbackground=false,在程序中,只要有乙個前台執行緒未退出,程序就不會終止。主線程就是乙個前台執行緒。而後台執行緒不管執行緒是否結束,只要所有的前台執行緒都退出(包括正常退出和異常退出)後,程序就會自動終止。一般後台執行緒用於處理時間較短的任務,如在乙個web伺服器中可以利用後台執行緒來處理客戶端發過來的請求資訊。而前台執行緒一般用於處理需要長時間等待的任務,如在web伺服器中的監聽客戶端請求的程式,或是定時對某些系統資源進行掃瞄的程式。下面的**演示了前台和後台執行緒的區別。?

publicstaticvoidmystaticthreadmethod()

thread thread =newthread(mystaticthreadmethod);

// thread.isbackground = true;

thread.start()

如果執行上面的**,程式會等待3秒後退出,如果將注釋去掉,將thread設成後台執行緒,則程式會立即退出。要注意的是,必須在呼叫start方法之前設定執行緒的型別,否則一但執行緒執行,將無法改變其型別。

通過begin***方法執行的執行緒都是後台執行緒,啟動了多個執行緒的程式在關閉的時候卻出現了問題,如果程式退出的時候不關閉執行緒,那麼執行緒就會一直的存在,但是大多啟動的執行緒都是區域性變數,不能一一的關閉,如果呼叫thread.currentthread.abort()方法關閉主線程的話,就會出現threadabortexception 異常,因此這樣不行。後來找到了這個辦法: thread.isbackground設定執行緒為後台執行緒。

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...

C 前台執行緒和後台執行緒

程序會等待所有的前台執行緒完成後再結束本工作 但是如果只剩下後台執行緒,則會直接結束本工作,不會等待後台執行緒完成後再結束本工作。1 new thread建立的執行緒 預設情況下使用new thread 方法建立的執行緒為前台執行緒,可以通過手動設定isbackground屬性來建立乙個後台執行緒 ...