簡體   English   中英

線程管理 - 一旦完成執行,線程是否會關閉?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM