程序會等待所有的前台執行緒完成後再結束本工作;但是如果只剩下後台執行緒,則會直接結束本工作,不會等待後台執行緒完成後再結束本工作。
1 new thread建立的執行緒
預設情況下使用new thread()方法建立的執行緒為前台執行緒,可以通過手動設定isbackground屬性來建立乙個後台執行緒;
預設前台執行緒示例:
#region thread前後臺執行緒測試測試**如下:public
static
void
backgroundtest()
is background:
",thread.currentthread.managedthreadid,thread.currentthread.isbackground));
}});
//new thread建立的執行緒預設為前台執行緒,會一直執行直到結束
thread1.start();
}#endregion
static執行結果:void main(string
args)
is background:
", thread.currentthread.managedthreadid, thread.currentthread.isbackground));
console.writeline(
"main ok");
}
把執行緒修改為後台執行緒測試,後台執行緒**如下:
這時候,再重新執行測試**,會發現,main方法執行完後程式後立即退出結束,因為這時候只有乙個前台執行緒即main方法,當main方法執行完後,會立即結束所有的後台執行緒的執行;
2 執行緒池
c#執行緒池中的工作執行緒預設都是後台執行緒,這意味著當所有的前台執行緒完成後,所有的後台執行緒將停止工作;但是可以通過設定修改為前台執行緒
thread.currentthread.isbackground = false;
public主線程測試**如下:static
void
threadpoomethod()
is background:
", thread.currentthread.managedthreadid, thread.currentthread.isbackground));
}});
}
static程式的執行結果是:執行緒池裡的threadpoomethod執行了3秒鐘後,程式會結束執行,因為作為唯一前台執行緒的主線程只會運3秒,main方法執行結束後執行緒池裡的工作執行緒會停止執行;void main(string
args)
is background:
", thread.currentthread.managedthreadid, thread.currentthread.isbackground));
thread.sleep(
3 * 1000
); console.writeline(
"main ok");
}
3 task
對於使用任務task,一般來說是使用執行緒池作為後台執行緒;
可以使用thread.currentthread.isbackground = false;改為前台執行緒
這時執行結果如下:
程式會一直執行下去。
c 前台執行緒和後台執行緒
前台執行緒 在主線程執行結束後,若前台執行緒沒有執行完則會阻止主線程的關閉 後台執行緒 在主線程執行結束後,整個執行緒會結束 class threadsample public void countnumbers prints thread.currentthread.name,i static v...
前台執行緒和後台執行緒
net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...
c 前台和後台執行緒
net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...