网站的建设好处,西安免费建网站制作,电脑网站怎样给网页做适配,可信网站图片logo安装在 C# 中#xff0c;Thread.Join 是一个非常有用的方法#xff0c;它可以让主线程#xff08;调用线程#xff09;等待子线程#xff08;被调用线程#xff09;执行完毕后再继续执行。
1、经典示例1
using System;
using System.Threading;public class Example
{stati…在 C# 中Thread.Join 是一个非常有用的方法它可以让主线程调用线程等待子线程被调用线程执行完毕后再继续执行。
1、经典示例1
using System;
using System.Threading;public class Example
{static Thread thread1, thread2;public static void Main(){thread1 new Thread(ThreadProc);thread1.Name Thread1;thread1.Start();thread2 new Thread(ThreadProc);thread2.Name Thread2;thread2.Start();Console.ReadKey();}private static void ThreadProc(){Console.WriteLine(\nCurrent thread: {0}, Thread.CurrentThread.Name);if (Thread.CurrentThread.Name Thread1 thread2.ThreadState ! ThreadState.Unstarted){Console.WriteLine(thread2.Join);thread2.Join(); }Thread.Sleep(1000);Console.WriteLine(\nCurrent thread: {0}, Thread.CurrentThread.Name);Console.WriteLine(Thread1: {0}, thread1.ThreadState);Console.WriteLine(Thread2: {0}\n, thread2.ThreadState);}
}
运行结果 Current thread: Thread1
thread2.JoinCurrent thread: Thread2Current thread: Thread2
Thread1: WaitSleepJoin
Thread2: RunningCurrent thread: Thread1
Thread1: Running
Thread2: Stopped
这个例子演示了“Thread.Join 会阻塞调用线程直到被调用线程完成执行”
2、经典示例2
using System.Threading;
using System;class TestThread
{private static void ThreadTst(){Console.WriteLine( Thread.CurrentThread.Name 开始执行);for (int i 0; i 10; i){Console.WriteLine( Thread.CurrentThread.Name i i);Thread.Sleep(10);}Console.WriteLine( Thread.CurrentThread.Name 执行完毕);}static void Main(string[] args){//程序调用了Main()函数时,就起动了一个进程,同时也启动了一个线程[这个线程就是主线程].Thread.CurrentThread.Name MainThread;//创建第一个线程Thread tA new Thread(new ThreadStart(TestThread.ThreadTst));tA.Name 线程A;Thread tB new Thread(new ThreadStart(TestThread.ThreadTst));tB.Name 线程B;Thread tC new Thread(new ThreadStart(TestThread.ThreadTst));tC.Name 线程C;Thread tD new Thread(new ThreadStart(TestThread.ThreadTst));tD.Name 线程D;for (int z 0; z 20; z){if (z 3){Console.WriteLine(tA.Start);tA.Start();Console.WriteLine(tB.Start);tB.Start();}else if (z 6){Console.WriteLine(tA.Join);tA.Join();Console.WriteLine(tB.Join);tB.Join();}else if (z 9){Console.WriteLine(tC.Start);tC.Start();Console.WriteLine(tD.Start);tD.Start();}else{Console.WriteLine(Thread.CurrentThread.Name z z);}}Console.Read();}
}运行结果
MainThread z 0
MainThread z 1
MainThread z 2
tA.Start
tB.Start
MainThread z 4
MainThread z 5
tA.Join线程A 开始执行线程A i 0线程B 开始执行 -注意这里并没有返回调用线程这里是线程B线程B i 0线程A i 1线程B i 1线程A i 2线程B i 2线程A i 3线程B i 3线程A i 4线程B i 4线程A i 5线程B i 5线程A i 6线程B i 6线程A i 7线程B i 7线程A i 8线程B i 8线程B i 9线程A i 9线程A 执行完毕线程B 执行完毕
tB.Join -注意线程B已经执行完毕了
MainThread z 7
MainThread z 8
tC.Start
tD.Start
MainThread z 10
MainThread z 11
MainThread z 12
MainThread z 13
MainThread z 14
MainThread z 15
MainThread z 16
MainThread z 17
MainThread z 18
MainThread z 19线程C 开始执行 -线程C是等主线程结束后才开始执行的线程C i 0线程D 开始执行线程D i 0线程C i 1线程D i 1线程C i 2线程D i 2线程C i 3线程D i 3线程C i 4线程D i 4线程C i 5线程D i 5线程C i 6线程D i 6线程C i 7线程D i 7线程C i 8线程D i 8线程C i 9线程D i 9线程C 执行完毕线程D 执行完毕
这个例子主要目的是对比使用join线程A、和未使用join线程C的区别