父类锁让并发减少,架构中不得不注意的问题

       今天做一个框架,我想把底层封装一个公共的方法,基层继承于此方法。但是,突然我想到一个问题,在实例化子类,调用基类方法的时候,会不会造成相互影响呢?例如,子类1 在调用基类方法的时候 锁住了,那会不会造成 其他子类实例化调用的 堵塞呢?

      于是做了一个测试,先上基类和子类的代码:

    

 public class LockClass
    {
        private static object ulock = new object();
        public DateTime BaseLockClass(int value) 
        {
           
            lock (ulock)
            {
                DateTime date =DateTime.Now;
                if (value == 1)
                {
                    Thread.Sleep(1000 * 10);
                   
                }
                else if (value == 2)
                {
                    Thread.Sleep(1000 * 5);
                }
                return date;
            }
        
        }

    }

    public class SonA : LockClass 
    {
    
    }

    public class SonB : LockClass 
    {
    
    }

    public class SonC : LockClass 
    { 
        
    }

在我基类中,我有一个方法,这个方法包含一个锁,同时针对不同类型,我暂停的时间不一样,如果值是1 则暂停10秒再往下面执行,如果是2 则暂时5秒,如果是3则不等待。

       下面是测试页面CS:

     

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) 
            {
                string Type = Request.QueryString["type"] ?? string.Empty;
                if (!string.IsNullOrEmpty(Type))
                {
                    if (Type == "1")
                    {
                        Response.Write(new SonA().BaseLockClass(1).ToString("HH时mm分ss秒"));
                    }
                    else if (Type == "2")
                    {
                        Response.Write(new SonB().BaseLockClass(2).ToString("HH时mm分ss秒"));
                    }
                    else if (Type == "3")
                    {
                        Response.Write(new SonC().BaseLockClass(3).ToString("HH时mm分ss秒"));
                    }

                    Response.End();
                }
            }
        }

在测试页面中则比较简单,我根据前台传值的不一样,调用不同的子类方法。同时进行输出。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="/Dialog/jquery-1.7.1.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">
        function Button1_onclick() {
            $.get("LockTest.aspx?type=1&date=" + new Date(), function (data) {
                $("#TextBox1").val(data);
            })
        }

        function Button2_onclick() {
            $.get("LockTest.aspx?type=2&date=" + new Date(), function (data) {
                $("#TextBox2").val(data);
            })
        }

        function Button3_onclick() {
            $.get("LockTest.aspx?type=3&date=" + new Date(), function (data) {
                $("#TextBox3").val(data);
            })
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td>
                    值一(延迟10秒):
                </td>
                <td>
                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                </td>
                <td>
                    <input id="Button1" type="button" value="button" οnclick="return Button1_onclick()" />
                </td>
            </tr>
            <tr>
                <td>
                    值二(延迟5秒):
                </td>
                <td>
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                </td>
                <td>
                    <input id="Button2" type="button" value="button" οnclick="return Button2_onclick()" />
                </td>
            </tr>
            <tr>
                <td>
                    值三(没有延迟):
                </td>
                <td>
                    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                </td>
                <td>
                    <input id="Button3" type="button" value="button" οnclick="return Button3_onclick()" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>


 

当我们先点按钮1  再点按钮二的时候,却总是发现。按钮2的值要等按钮1的值出来以后,再等5秒才会出现。这个就是一个需要大家重视的问题。如果我们在架构架构的时候,把数据缓存提取出来作为一个功能的类,那一定会发现,当某功能引起方法锁住的时候,后面的方法只能依次等待。反而让我们的系统的并发性大大减少。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值