如果线程已经完成,Thread.Join将返回我们。同样,我们可以使用ThreadState来确定。那么Thread.Join()和Thread.ThreadState之间有什么区别呢?
我们可以互换使用它们吗?
发布于 2010-09-01 01:14:13
Join和手动查看ThreadState之间的区别在于Join是一个阻塞操作。该函数在超时或目标Thread完成之前不会返回。检查ThreadState更像是一种窥探操作。
发布于 2010-09-01 01:13:50
Thread.join等待线程完成。ThreadState只会给你一个线程的快照,不需要等待就会返回。还有一种Thread.join的变体,需要等待一段时间。ThreadState和Join是非常不同的,我不认为两者可以互换使用。
尝试在具有无限循环的线程上执行两个调用的测试。
发布于 2010-09-01 01:26:20
当您调用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,...)而不影响调用线程的状态(不是as Join,它将调用线程置于WaitSleepJoin状态)。因此,只有当你想要检查线程发生了什么,以便你可以采取特定的操作,或者你想要实现你自己的连接机制,等等时,才能使用它。
https://stackoverflow.com/questions/3611459
复制相似问题