C#线程对象的生命周期(C# Thread object lifetime)

转载地址:https://www.it1352.com/387543.html

Suppose I have a code as follows:

int Main()
{
    if (true)
    {
       new Thread(()=>
          {
              doSomeLengthyOperation();
          }).Start();
    }
    while (true)
    {
       //do nothing
    }
}

There are 2 threads, I’m going to call the Main thread the thread that is executing the Main() function, and the thread being new’ed up inside the “if” test as Thread A.

My question is, when does Thread A get destroyed? Will doSomeLenghtyOperation() be able to run into completion?

Since there are no references pointing at Thread A, will it be marked as a candidate for garbage collection:

Immediately after the “new Thread().Start()” statement itself finishes?
Immediately after the “if(true)” scope is exited?
After the doSomeLengthOperation() runs to finish?
Never?
All the examples I see are the Main() holding the reference, and then Main thread waiting to join with thread A before exiting. I’m curious what the lifetime of the code above is.

Thanks in advance!

answer
The Thread object will be eligible for garbage collection as soon as it’s not used any more, i.e. immediately after calling the Start method. (It will however not be collected immediately, as the garbage collector runs at specific times.)

The actual thread however is not relying on the Thread object, and will continue to run even if the Thread object is collected.

If the thread is still running when the main method exits, the application will not end until the thread completes, unless you have marked the thread to be a background thread.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值