通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,crh2c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
在弄电商类网站的时候,往往是根据年月日时分秒的格式生成订单号(yyyyMMddHHmmss),为了解决并发性,就直接在生成订单号的区域块加上lock。
下面,我们来简单测试一下。
1.新建项目(控制台应用程序)

2.新建一个类:OrderIdHelper.cs
/// <summary>
/// 订单助手
/// </summary>
class OrderIdHelper
{
private static readonly object Locker = new object();
private static string _tempId = "";
/// <summary>
/// 生成订单编号
/// </summary>
public static void GenerateId()
{
lock (Locker) //lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
{
var orderId = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss"); //年月日时分秒
if (string.Equals(_tempId, orderId))
{
throw new Exception("订单号重复!");
}
_tempId = orderId;
Console.WriteLine(orderId);
}
}
}
</div>
3.Program.cs
class Program
{
static void Main(string[] args)
{
//创建包含两个线程的数组
var threads = new Thread[2]
{
new Thread(OrderIdHelper.GenerateId),
new Thread(OrderIdHelper.GenerateId),
};
foreach (var thread in threads)
{
//线程启动
thread.Start();
}
Console.Read();
}
}
</div>
4.结果:=====OrderIdDemo_1.rar 点我下载=====

5.发现一个不错的订单号生成规则,稍作改动: 不重复订单号生成规则(原网址)
/// <summary>
/// 订单助手
/// </summary>
public class OrderHelper
{
/// <summary>
/// 防止创建类的实例
/// </summary>
private OrderHelper() { }
private static readonly object Locker = new object();
private static int _sn = 0;
/// <summary>
/// 生成订单编号
/// </summary>
/// <returns></returns>
public static string GenerateId()
{
lock (Locker) //lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
{
if (_sn == int.MaxValue)
{
_sn = 0;
}
else
{
_sn++;
}
Thread.Sleep(100);
return "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss")+ _sn.ToString().PadLeft(10, '0');
}
}
}
</div>
6.关于使用GUID的个人见解。
①不清楚生成的时间,不方便管理。
②官方解释:GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。 此标识符重复的可能性非常小。
以上所述就是本文的全部内容了,希望大家能够喜欢。
</div>
