首页 > 代码库 > C#多线程(入门篇)

C#多线程(入门篇)

昨天一同学问我相关多线程的东西,真是菜鸡互啄呀!我想想还是自己整理整理吧,也是复习下。菜鸟勿喷!

技术分享

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading;  6 using System.Runtime.Remoting.Messaging;  7   8 namespace ThreadTest  9 { 10     public delegate void DelegateHandler(string a, string b); 11     public class Program 12     { 13         static void Main(string[] args) 14         { 15             //创建线程原始写法,每次启用新的线程都要实例化一个Thread对象 16             Thread threadA = new Thread(new ThreadStart(PrintA)); 17             threadA.Start(); 18  19             //创建一个线程,没区别,c#的语法糖写法(本人一直用的这个) 20             Thread threadB = new Thread(PrintB); 21             threadB.Start(); 22  23             //最简化写法 24             new Thread(PrintC).Start(); 25  26             /* 27              * Task在.net 4.0后代替了ThreadPool(线程池) 28              * 程序员嫌每次启动一个线程麻烦,则先new多个线程放到线程池里, 29              * 可以理解为放到一个List里(泛型:List<Thread>),调用函数的时候则从List中取出一个空闲的线程 30              * 执行完毕再放回去。 31             */ 32             System.Threading.Tasks.Task.Factory.StartNew(PrintD); 33  34             //带一个参数,函数参数一定要是object对象 35             Thread threadN = new Thread(PrintN); 36             threadN.Start("N"); 37  38             //带一个参数,函数参数一定要是object对象 39             Thread threadM = new Thread(new ParameterizedThreadStart(PrintN)); 40             threadM.Start("M"); 41  42             /* 43              *带多个参数 44              *方法1:参数放数组里传递 45              *方法2:新建个无参方法,来调用多参数函数,参数在无参方法里传值(个人认为最笨方法) 46              *方法3:新建个类,把被调用的函数和多个参数写在这个类里,主程序调用(与方法2如出一辙) 47              *方法4:委托 48              *网上还有好多其他方法,这里用委托来实现下 49             */ 50             DelegateHandler dh = new DelegateHandler(PrintQ); 51             dh("P", "Q"); 52  53             for (int i = 0; i < 1000; i++) 54             { 55                 Console.Write("X"); 56             } 57             Console.ReadKey(); 58         } 59         #region Print 60         static void PrintA() 61         { 62             for (int i = 0; i < 1000; i++) 63             { 64                 Console.Write("A"); 65             } 66         } 67  68         static void PrintB() 69         { 70             for (int i = 0; i < 1000; i++) 71             { 72                 Console.Write("B"); 73             } 74         } 75  76         static void PrintC() 77         { 78             for (int i = 0; i < 1000; i++) 79             { 80                 Console.Write("C"); 81             } 82         } 83  84         static void PrintD() 85         { 86             for (int i = 0; i < 1000; i++) 87             { 88                 Console.Write("D"); 89             } 90         } 91  92         static void PrintN(object obj) 93         { 94             for (int i = 0; i < 1000; i++) 95             { 96                 Console.Write(obj.ToString()); 97             } 98         } 99 100         static void PrintQ(string a, string b)101         {102             for (int i = 0; i < 1000; i++)103             {104                 Console.Write(a + b);105             }106         }107         #endregion108     }109 }

更多代码,更新ing...

 

C#多线程(入门篇)