定义就不多说了,直接上代码
1 /// <summary> 2 /// 单线程应用 3 /// </summary> 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 Console.WriteLine("进入主线程"); 9 User u = new User("小刚"); 10 u.Getshow(); 11 Console.WriteLine("主线程结束"); 12 } 13 } 14 public class User 15 { 16 private string name; 17 public User(string name) 18 { 19 this.name = name; 20 } 21 public void Getshow() 22 { 23 Console.WriteLine("Name=>" + name); 24 } 25 }
这样的一个控制台程序,他就包含了一个线程,这个线程是由系统自动分配给他的,也就是主线程。
是从入口函数Main方法开始主线程,进行顺序控制流程。程序到达GetShow时候线程转到该方法内部执行,当该方法内部执行完成之后在回到Main方法里面。继续顺序执行下面的输出Console.WriteLine("主线程结束");执行流程如下。这也就是为啥说是单线程了,只会走一条道。
现在开启一个多线程执行GetShow里面的行为,不采用主线程执行
(这句话的意思是再从系统中拉出来一个线程,去执行其他的方法;不会与主线程抢占“人力”)
1 /// <summary> 2 /// 多线程应用 3 /// </summary> 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 Console.WriteLine("进入主线程"); 9 User u = new User("小刚"); 10 Thread subthread = new Thread(new ThreadStart(u.Getshow));//创建新线程 11 subthread.Start(); //开启线程 12 Console.WriteLine("主线程结束"); 13 } 14 } 15 16 public class User 17 { 18 private string name; 19 public User(string name) 20 { 21 this.name = name; 22 } 23 public void Getshow() 24 { 25 Console.WriteLine("Name=>" + name); 26 } 27 }
在主线程里面,新开了一个线程,去执行Getshow方法里面的操作。
主线程创建新的线程以后,不会等待Getshow里面的代码执行完毕。//相当于系统又给他分配了一个干活的帮手,俩人齐头并进同时把事干完,但是谁先完成不一定。也可能是主线程也可能是新来的帮手先完成
而是直接执行后面的代码:Console.WriteLine("主线程结束");