1. 程式人生 > >多線程小結(1)

多線程小結(1)

ogr private 順序執行 sed article 其他 pri 控制臺 dst

原文出處

定義就不多說了,直接上代碼

技術分享圖片
 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 }
View Code

這樣的一個控制臺程序,他就包含了一個線程,這個線程是由系統自動分配給他的,也就是主線程。

是從入口函數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("主線程結束");

技術分享圖片

多線程小結(1)