多线程与锁:
namespace Threads { class Program { static void Main(string[] args) { Thread[] ths = new Thread[5]; for (int i = 0; i < ths.Length; i++) { ths[i] = new Thread(new ThreadStart(Print)); ths[i].Name = "Thread" + i; } foreach (Thread th in ths) { th.Start(); Thread.Sleep(5); } Console.ReadLine(); } private static object locked = new object(); public static void Print() { lock (locked) { //显示线程信息。 Console.WriteLine(Thread.CurrentThread.Name); Console.Write("你的号码是:"); for (int i = 0; i < 5; i++) { Thread.Sleep(100 * new Random().Next(5)); Console.Write(i+","); } Console.WriteLine(); } } } }
简单线程池:
namespace ThreadPool2 { class Program { static void Main(string[] args) { Console.WriteLine("Main Thread:" + Thread.CurrentThread.ManagedThreadId); Print p = new Print(); WaitCallback back = new WaitCallback(PrintTheNumbers); for (int i = 0; i < 5; i++) { ThreadPool.QueueUserWorkItem(back, p); } Console.WriteLine("All tasks queued"); Console.ReadLine(); } public static void PrintTheNumbers(object state) { Print p = (Print)state; p.PrintNumber(); } class Print { private object locked = new object(); public void PrintNumber() { lock (locked) { Console.WriteLine("ThreadName:" + Thread.CurrentThread.ManagedThreadId); Console.Write("你的号码是:"); for (int i = 0; i < 5; i++) { Console.Write(i + ","); Thread.Sleep(500); } Console.WriteLine(); } } } } }