[英]Thread management - are threads shut down once done executing?
我正在查看遺留系統並查看以下代碼。 ServiceLifetimeThread
方法在單獨的線程上啟動,然后在第二個try
塊中創建新線程。
我的問題是那些創建的新線程會發生什么? 一旦CheckDeviceStatus
執行完畢,它們會關閉嗎?
private void ServiceLifetimeThread(WaitHandle pleaseStopEvent, object args)
{
while (!PleaseStopEvent)
{
try
{
//freeze the lifetime thread on configurable period of time
pleaseStopEvent.WaitOne(_serviceConfiguration.LifeTimeThreadWakeUpIntervalSeconds /*seconds*/ * 1000 /*milliseconds*/);
}
catch (Exception ex)
{
// Log it...
}
try
{
var deviceIds = GetDeviceIdsToCheckStatus();
foreach (var deviceId in deviceIds)
{
//each time start the new thread and send a command to it
new Thread(CheckDeviceStatus).Start(deviceId);
}
}
catch (Exception ex)
{
// Log it...
}
}
}
我認為在這里對“線程”這個詞進行區分非常重要。 這里有兩種類型的“線程”(至少我們關注):
1:System.Threading.Thread - 一個對象。
2:CLR(托管)線程。
一旦.Start()
完成調用(例如,for循環繼續到下一行),通過調用new Thread()
創建的OBJECT
將有資格進行垃圾收集,並且每當GC決定最佳時將被銷毀/清理(GC的操作對我來說似乎是一種黑暗的藝術!)
但是, .Start()
方法將創建一個新的CLR線程。 這不受上面創建的對象的生命周期的影響,因此不會受到垃圾收集器對該對象的影響。 相反,只要方法“CheckDeviceStatus”完成,就會銷毀此CLR線程。
這可以通過調用Thread.Abort和其他一些東西來改變,但是你的代碼示例沒有提到這些,也沒有表明它們的使用,所以我沒有進入這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.