热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

       今天做一个框架,我想把底层封装一个公共的方法,基层继承于此方法。但是,突然我想到一个问题,在实例化子类,调用基类方法的时候,会不会造成相互影响呢?例如,子类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();
}
}
}

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




























值一(延迟10秒):





值二(延迟5秒):





值三(没有延迟):










 

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

父类锁让并发减少,架构中不得不注意的问题,布布扣,bubuko.com


推荐阅读
  • JavaSE For循环入门示例
    本文将介绍Java中For循环的基本概念和使用方法,通过几个简单的示例帮助初学者更好地理解和掌握For循环。 ... [详细]
  • 本文介绍了如何使用线段树实现区间加法和区间查询操作,包括详细的代码实现和解释。 ... [详细]
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • 线段树,注 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • iOS 百度地图使用指南:基本定位与地理编码
    本文详细介绍如何在 iOS 应用中集成百度地图,实现基本的地图定位和地理编码功能。配置详情请参考官方文档:http://developer.baidu.com/map/index.php?title=iossdk ... [详细]
  • Java 中的控制流与作用域
    本文详细介绍了 Java 中的控制流语句,包括块作用域、if 语句、for 循环、while 循环、do-while 循环、switch 语句以及 break 和 continue 语句的使用方法。通过具体的代码示例,帮助读者更好地理解和应用这些控制流结构。 ... [详细]
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
author-avatar
RAL-1314921
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有