1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 7 namespace ThreadTest 8 { 9 class Program 10 { 11 // 信号 12 static AutoResetEvent ar = new AutoResetEvent(false); 13 14 // 一个公用的变量 15 static int i = 0; 16 17 // Thread Method 1 18 static void WriteMethod(object state) { 19 while (i < 10) { 20 Thread.Sleep(1000); 21 i++; 22 //Console.WriteLine("{1} Write i : {0}", i, Thread.CurrentThread.Name); 23 Console.WriteLine("{1} Write i : {0}", i, (string)state); 24 ar.Set(); 25 } 26 } 27 28 // Thread Method 2 29 static void ReadMethod(object state) { 30 while (true) { 31 ar.WaitOne(); 32 //Console.WriteLine("{1} Read i : {0}", i, Thread.CurrentThread.Name); 33 Console.WriteLine("{1} Write i : {0}", i, (string)state); 34 } 35 } 36 37 static void Main(string[] args) { 38 // 开启 写入线程 39 // 线程池方法 40 ThreadPool.QueueUserWorkItem(WriteMethod,"Write Thread "); 41 42 // 普通开线程方法 43 //Thread write = new Thread(new ThreadStart(WriteMethod)); 44 //write.Name = "Write Thread "; 45 46 // 如果是后台线程,需要 一个 Console.ReadKey 等待 47 //write.IsBackground = true; 48 //write.Start(); 49 50 // 开启 读取线程 51 // 线程池方法 52 ThreadPool.QueueUserWorkItem(ReadMethod,"Read Thread "); 53 54 // 普通开线程方法 55 //Thread read = new Thread(new ThreadStart(ReadMethod)); 56 //read.Name = "Read Thread "; 57 58 // 如果是后台线程,需要 一个 Console.ReadKey 等待 59 //read.IsBackground = true; 60 //read.Start(); 61 62 // 如果使用线程池方法的时候.线程都是 后台线程. Console 会立即结束.所以需要这个方法来阻塞主线程 63 Console.ReadKey(); 64 } 65 } 66 }