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!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…