首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thread.Join vs Thread.State

Thread.Join vs Thread.State
EN

Stack Overflow用户
提问于 2010-09-01 01:11:49
回答 4查看 3.1K关注 0票数 7

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

我们可以互换使用它们吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-01 01:14:13

Join和手动查看ThreadState之间的区别在于Join是一个阻塞操作。该函数在超时或目标Thread完成之前不会返回。检查ThreadState更像是一种窥探操作。

票数 14
EN

Stack Overflow用户

发布于 2010-09-01 01:13:50

Thread.join等待线程完成。ThreadState只会给你一个线程的快照,不需要等待就会返回。还有一种Thread.join的变体,需要等待一段时间。ThreadState和Join是非常不同的,我不认为两者可以互换使用。

尝试在具有无限循环的线程上执行两个调用的测试。

票数 6
EN

Stack Overflow用户

发布于 2010-09-01 01:26:20

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

例如:

代码语言:javascript
复制
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状态)。因此,只有当你想要检查线程发生了什么,以便你可以采取特定的操作,或者你想要实现你自己的连接机制,等等时,才能使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3611459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档