System.Threading.Thread thd1 = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
thd1.Start();
System.Threading.Thread thd2 = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
thd2.Start();
thd1.Join();
thd2.Join();
我只想知道为什么人们使用Thread.Join() ?
Thread.Join()
阻止执行下一行并等待特定线程完成。当特定线程完成后,下一行就会被执行。
用正确的例子告诉我Thread.Join()
的意图。感谢
答案 0 :(得分:1)
这是订购线程执行的一种方法,如果在t2之前需要t1,请查看以下示例:
static void Main()
{
Thread t1 = new Thread(() =>
{
Thread.Sleep(4000);
Console.WriteLine("t1 is ending.");
});
t1.Start();
Thread t2 = new Thread(() =>
{
Thread.Sleep(1000);
Console.WriteLine("t2 is ending.");
});
t2.Start();
t1.Join();
Console.WriteLine("t1.Join() returned.");
t2.Join();
Console.WriteLine("t2.Join() returned.");
}
此示例生成以下输出:
t2即将结束。 t1即将结束。 t1.Join()返回。 t2.Join()返回。
答案 1 :(得分:1)
Thread.Join()
阻止执行下一行并等待特定线程完成。
这正是人们使用Thread.Join()
的原因。
是的,你希望你的不同线程尽可能地分别做不同的事情,但是当线程A需要线程B正在获取的东西时,或者在线程B完成某事之前不能做某事,那么最简单的达到这一点的方法是使用Thread.Join()
。
在你的问题的例子中,这并不是非常有用,因为你有三个线程,其中一个没有用处。
稍微更现实的版本是:
Thread thd1 = new System.Threading.Thread(new ThreadStart(DoWork));
thd1.Start();
DoWork();
thd1.Join();
在这里,您有两个线程做两个线程值得工作。当我们到达thd1.Join()
时,thd1
可能已经完成并且加入是一个nop,但以防我们等待确保它已完成。
另一个更现实的例子是当你创建多个线程然后加入那些线程时,因为虽然让创建线程等待是浪费,但编写一个设置X线程的循环更简单而不是一个设置X-1线程的循环,并完成最后一项的工作。
尽可能长时间地(或者根本)避免Join
肯定是一个好主意,通常可以更有效地使用可用线程,但Join
很简单,简单就是好太