在弄電商類網(wǎng)站的時(shí)候,往往是根據(jù)年月日時(shí)分秒的格式生成訂單號(yyyyMMddHHmmss),為了解決并發(fā)性,就直接在生成訂單號的區(qū)域塊加上lock。
下面,我們來簡單測試一下。
1.新建項(xiàng)目(控制臺應(yīng)用程序)

2.新建一個(gè)類: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 關(guān)鍵字可確保當(dāng)一個(gè)線程位于代碼的臨界區(qū)時(shí),另一個(gè)線程不會進(jìn)入該臨界區(qū)。15 {16 var orderId = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss"); //年月日時(shí)分秒17 18 if (string.Equals(_tempId, orderId))19 {20 throw new Exception("訂單號重復(fù)!");21 }22 23 _tempId = orderId;24 25 Console.WriteLine(orderId);26 }27 }28 }View Code3.Program.cs

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //創(chuàng)建包含兩個(gè)線程的數(shù)組 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 Code4.結(jié)果:=====OrderIdDemo_1.rar點(diǎn)我下載=====

5.發(fā)現(xiàn)一個(gè)不錯(cuò)的訂單號生成規(guī)則,稍作改動: 不重復(fù)訂單號生成規(guī)則(原網(wǎng)址)
1 /// <summary> 2 /// 訂單助手 3 /// </summary> 4 public class OrderHelper 5 { 6 /// <summary> 7 /// 防止創(chuàng)建類的實(shí)例 8 /// </summary> 9 private OrderHelper() { }10 11 private static readonly object Locker = new object();12 private static int _sn = 0;13 14 /// <summary>15 /// 生成訂單編號16 /// </summary>17 /// <returns></returns>18 public static string GenerateId()19 {20 lock (Locker) //lock 關(guān)鍵字可確保當(dāng)一個(gè)線程位于代碼的臨界區(qū)時(shí),另一個(gè)線程不會進(jìn)入該臨界區(qū)。21 {22 if (_sn == int.MaxValue)23 {24 _sn = 0;25 }26 else27 {28 _sn++;29 }30 31 Thread.Sleep(100);32 33 return "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss")+ _sn.ToString().PadLeft(10, '0');34 }35 } 36 }6.關(guān)于使用GUID的個(gè)人見解。
①不清楚生成的時(shí)間,不方便管理。
②官方解釋:GUID 是一個(gè) 128 位整數(shù)(16 字節(jié)),可用于所有需要唯一標(biāo)識符的計(jì)算機(jī)和網(wǎng)絡(luò)。此標(biāo)識符重復(fù)的可能性非常小。<==詳見MSDN文檔==>
新聞熱點(diǎn)
疑難解答
圖片精選