防止数据并发目前我使用到两种方式:1.数据表加锁.2.使用单例模式.
使用有状态的单例模式,用户一访问单例类时,单例类状态为初始状态可以返回单例类实例,并将单例类状态修改为状态一.此时用户二访问单例类,因状态为状态一,返加null值,客户端根据null值判断有用户正在使用单例类.当用户一完成操作后将单例类状态修改为初始状态.若再有用户访问该单例类,则可返回单例类实例.(单例类还有一个优点:仅在内存中存在一个实例)
代码示例如:
public class KeyTable
{
private static bool flag = true;
private static KeyTable kt = new KeyTable();
private int key;
private KeyTable()
{
}
public static KeyTable GetTable()
{
if
(flag)
{
flag = false;
return
kt;
}
return null;
}
public int GetKey(int
i)
{
key = i;
key++;
System.Threading.Thread.Sleep(5000);
flag = true;
return
key++;
}
}
客户端调用:
KeyTable kt = KeyTable.GetTable();
if (kt == null)
{
Response.Write("<script>alert('其它用户正在使用!');</script>");
}
else
{
Response.Write("<br />," +
kt.GetKey(100).ToString());
}