程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#:lock鎖與訂單號(或交易號)的生成,

C#:lock鎖與訂單號(或交易號)的生成,

編輯:C#入門知識

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.======================未完,待續=======================

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved