回答
Join()
基本上while(thread.running){}
{
thread.start()
stuff you want to do while the other thread is busy doing its own thing concurrently
thread.join()
you won't get here until thread has terminated.
}
假设您有一个将某些工作委托给工作线程的主线程。主线程需要一些工作人员正在计算的结果,所以在所有工作线程完成之前它不能继续。
在这种情况下,主线程会在每个工作线程上调用Join()
。所有Join()
调用都返回后,主线程知道所有工作线程已完成,并且计算结果可供其使用。
想象你的程序运行在Thread1
。然后你需要开始一些计算或处理 - 你开始另一个线程 - Thread2
。然后如果你想让你的Thread1等到Thread2
结束,你执行Thread1.Join();
和Thread1
将不会继续执行,直到Thread2
完成。
这是描述MSDN。
这个简单的例子的方法:
public static void Main(string[] args)
{
Console.WriteLine("Main thread started.");
var t = new Thread(() => Thread.Sleep(2000));
t.Start();
t.Join();
Console.WriteLine("Thread t finished.");
}
该程序通过印刷消息到屏幕上,然后开始一个新的线程,该线程终止之前刚刚暂停2秒开始。只有t
线程完成执行后才会打印最后一条消息,因为Join
方法调用将阻止当前线程,直到t
线程终止。
这很简单,但也相当无用:一个Thread.Start紧跟着一个Thread.Join,它使用第二个线程的整个目的失败。 (我知道这是一个玩具的例子,但仍然...) – Heinzi 2010-03-19 11:03:12
@ Heinzi,它只是按要求演示了'Join'方法的基本行为。它从来没有打算描绘一个真实世界的场景。 – 2010-03-19 11:26:46
static void Main()
{
Thread t = new Thread(new ThreadStart(some delegate here));
t.Start();
Console.WriteLine("foo");
t.Join()
Console.WriteLine("foo2");
}
在你委托你会有这样的另一个电话:
Console.WriteLine("foo3");
输出是:
foo
foo3
foo2
int fibsum = 1;
Thread t = new Thread(o =>
{
for (int i = 1; i < 20; i++)
{
fibsum += fibsum;
}
});
t.Start();
t.Join(); // if you comment this line, the WriteLine will execute
// before the thread finishes and the result will be wrong
Console.WriteLine(fibsum);
这只是添加到现有的答案,这解释了什么Join
做什么。
调用Join
也有允许消息泵处理消息的副作用。有关这可能有关的情况,请参阅此knowledge base article。
- 1. Cocoa中的等效C#'Thread.Join()'是什么?
- 2. Objective-C方法定义中分号的意义是什么?
- 3. 包装方法的意义是什么?
- 4. ToString()方法的意义是什么?
- 5. std :: thread.join()是做什么的?
- 6. 方法python方法签名中_ = None的意义是什么?
- 7. “〜方法”是什么意思?
- 8. C++中的(*)语法是什么意思?
- 9. RegisterClientScriptBlock方法调用中的Type参数的意义是什么?
- 10. C中<:语法的意义是什么?
- 11. Actors body中“loop()”方法的意义是什么?GPars
- 12. 方法中'静态'的意义是什么
- 13. 在声明方法时,C++中的= 0是什么意思?
- 14. 你在C#中的“扩展方法”是什么意思?
- 15. C中##是什么意思?
- 16. 什么是在C(0.0)++意义
- 17. 什么?在C#中是什么意思?
- 18. Thread.join()(实例方法)
- 19. 实现像这样的Objective C init方法有什么意义?
- 20. 什么是tf.extract_image_patches方法的意思?
- 21. 'useArrows:true'的意义是什么?
- 22. PIDS_PER_CPU_DEFAULT的意义是什么?
- 23. OrderedFriendsListInitialData的意义是什么?
- 24. -532459699的意义是什么?
- 25. !== -1的意义是什么?
- 26. System.CLSCompliantAttribute的意义是什么?
- 27. 在c#中“生成方法存根”是什么意思?
- 28. 什么是C#中的匿名方法?
- 29. C#中的Arccos方法是什么?
- 30. 什么是C#中的“静态方法”?
MSDN说那里“阻塞调用线程,直到一个线程终止,同时继续执行标准COM和SendMessage泵。”执行标准COM有什么意义? sendMessage抽水的意义是什么? – Techee 2010-03-19 12:06:31
实际上,这是不正确的。如果您希望'Thread1'等到'Thread2'结束,则执行'Thread2.Join()',而不是'Thread1.Join()'。 – d7samurai 2014-02-01 17:59:07