C#:lock鎖與訂單號(或交易號)的生成,
在弄電商類網站的時候,往往是根據年月日時分秒的格式生成訂單號(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.======================未完,待續=======================