单例模式防数据并发[原创]

来源:互联网 发布:ubuntu 16 aptget 源 编辑:程序博客网 时间:2024/06/05 00:14

防止数据并发目前我使用到两种方式: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());
        }