国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-17 02:19:17
字體:
供稿:網(wǎng)友

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

  在弄電商類網(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 Code

3.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 Code

4.結(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文檔==>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 中卫市| 专栏| 霍城县| 苍南县| 子长县| 仪陇县| 仲巴县| 礼泉县| 芦山县| 衡山县| 颍上县| 淮阳县| 霍城县| 赫章县| 清流县| 乐亭县| 天柱县| 中宁县| 清徐县| 吉木萨尔县| 铁岭市| 佛冈县| 镇坪县| 怀安县| 鞍山市| 汨罗市| 安吉县| 九龙城区| 连山| 文登市| 宝山区| 奇台县| 隆回县| 尉犁县| 霍林郭勒市| 哈巴河县| 香格里拉县| 洪湖市| 长乐市| 永康市| 贵南县|