【多线程-Join()方法】

来源:互联网 发布:当代网络小说家排行榜 编辑:程序博客网 时间:2024/05/16 14:12

一. 什么时候使用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()方法可以用于简单线程项目的线程同步。

1 0
原创粉丝点击