一. 什么时候使用Join()方法:
当一个线程操作需要等待另一个线程执行完毕之后才能继续进行时,使用Join()方法。Join方法会等到使用该方法的线程结束后再执行下面的代码。
二. 使用:
比如这里我们要在subthread线程执行完毕,然后才能执行主线程:在下面代码中会出现主线程执行完了,subthread线程还在执行,与我们所要求的想反。
class Program
{
private static Thread subthread ;
private static string name ="";
static void Main(string[] args)
{
subthread = new Thread(new ThreadStart(GetShow));
subthread.Start(); //开启线程
Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束");
Console.WriteLine("姓名:" + name);
}
static void GetShow()
{
Console.WriteLine("输入姓名:");
name = Console.ReadLine();
}
}
如果不用Join()方法,我们可能想到使用Sleep()方法休眠一下主线程:
static void Main(string[] args)
{
subthread = new Thread(new ThreadStart(GetShow));
subthread.Start(); //开启线程
Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束");
Thread.Sleep(3000);
Console.WriteLine("姓名:" + name);
}
我们让主线程休息三秒钟,这样我们执行子线程后,立即输入完信息,刚好子线程执行完毕,然后主线程的休息时间也过了,达到了上面的需求,但是通过这样的方式还是会有问题,不能确切的进行控制。所有我们使用Join进行控制:
static void Main(string[] args)
{
subthread = new Thread(new ThreadStart(GetShow));
subthread.Start(); //开启线程
Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束");
subthread.Join();//等待>当subthread线程执行完毕之后,才执行下面的语句
Console.WriteLine("姓名:" + name);
}
Join()方法可以用于简单线程项目的线程同步。