Thread.Join vs Thread.State

时间:2010-08-31 17:11:49

标签: c# .net multithreading

如果线程已经完成,Thread.Join将返回我们。我们可以使用ThreadState确定相同的内容。那么Thread.Join()和Thread.ThreadState之间有什么区别?

我们可以互换使用吗?

4 个答案:

答案 0 :(得分:14)

加入和手动查看ThreadState之间的区别是Join是阻止操作。在达到超时或目标Thread完成之前,该函数不会返回。检查ThreadState更像是一个窥视操作。

答案 1 :(得分:6)

Thread.join等待线程完成。 ThreadState只是为您提供线程的快照,并且无需等待即可返回。还有一个Thread.join的变种,需要一些时间等待。 ThreadState和Join非常不同,我认为两者都不能互换使用。

尝试进行测试,在具有无限循环的线程上进行两次调用。

答案 2 :(得分:3)

当你调用Thread.Join()时,它会阻塞调用线程,直到完成了Join方法的线程。如果它被中止或成功完成,则后面的Join()将不会阻止调用线程。这允许您拥有10个工作线程和一个主线程,在完成所有10个线程后必须运行该操作。所以你可以在第一个线程上调用Join()。该调用将阻塞主线程,直到第一个工作线程完成。之后,您可以在第二个线程上调用Join(),依此类推,直到进入第10个线程。当你调用Join()并恢复主线程时,你可以确保所有10个线程都已完成,主线程可以恢复其操作。

例如:

Thread workers[] = new Thread[10];

//*** create and start threads ***

foreach(Thread worker in workers)
{
    worker.Join();
}

//All threads are completed, now this operation can continue...

另一方面,Thread.ThreadState仅返回thread status(Aborted,Running,...)而不影响调用线程的状态(而不是将调用线程置于WaitSleepJoin状态的Join)。所以这只是用于检查线程发生的事情,以便您可以采取某种行动,或者您想要实现自己的加入机制,等等...

答案 3 :(得分:0)

Thread.Join将阻止调用线程