在弄電商類網站的時候,往往是根據年月日時分秒的格式生成訂單號(yyyyMMddHHmmss),為了解決並發性,就直接在生成訂單號的區域塊加上lock。
下面,我們來簡單測試一下。
1.新建項目(控制台應用程序)
2.新建一個類:OrderIdHelper.cs
1 /// <summary> 2 /// 訂單助手 3 /// </summary> 4 class OrderIdHelper 5 { 6 private static readonly object Locker = new object(); 7 private static string _tempId = ""; 8 9 /// <summary> 10 /// 生成訂單編號 11 /// </summary> 12 public static void GenerateId() 13 { 14 lock (Locker) //lock 關鍵字可確保當一個線程位於代碼的臨界區時,另一個線程不會進入該臨界區。 15 { 16 var orderId = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss"); //年月日時分秒 17 18 if (string.Equals(_tempId, orderId)) 19 { 20 throw new Exception("訂單號重復!"); 21 } 22 23 _tempId = orderId; 24 25 Console.WriteLine(orderId); 26 } 27 } 28 } View Code
3.Program.cs
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //創建包含兩個線程的數組 6 var threads = new Thread[2] 7 { 8 new Thread(OrderIdHelper.GenerateId), 9 new Thread(OrderIdHelper.GenerateId), 10 }; 11 12 foreach (var thread in threads) 13 { 14 //線程啟動 15 thread.Start(); 16 } 17 18 Console.Read(); 19 } 20 } View Code
4.結果:=====OrderIdDemo_1.rar 點我下載=====
5.======================未完,待續=======================