位置: IT常识 - 正文

Java 中的Double Check Lock(转)(java中double是什么数据类型)

编辑:rootadmin
Java 中的Double Check Lock(转) - - ITeye技术网站Java 中的Double Check Lock(转) 博客分类:多线程与并发编程Java多线程编程对于多线程编程来说 Java 中的Double Check Lock(转) 博客分类:

多线程与并发编程Java多线程编程

推荐整理分享Java 中的Double Check Lock(转)(java中double是什么数据类型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java里面的double,java里的double,java double double,java里double的用法,java里面double什么意思,java里面double什么意思,java double double,java里的double,内容如对您有帮助,希望把文章链接给更多的朋友!

对于多线程编程来说,同步问题是我们需要考虑的最多的问题,同步的锁什么时候加,加在哪里都需要考虑,当然在不影响功能的情况下,同步越少越好,锁加的越迟越优是我们都必须认同的。DCL(Double Check Lock)就是为了达到这个目的。

DCL简单来说就是check-lock-check-act,先检查再锁,锁之后再检查一次,最后才执行操作。这样做的目的是尽可能的推迟锁的时间。网上普遍举的一个例子是延迟加载的例子。

Java代码

publicJava 中的Double Check Lock(转)(java中double是什么数据类型)

class LazySingleton{ private

static

volatile LazySingletoninstance; public

static LazySingletongetInstantce(){ if (instance== null ){ synchronized (LazySingleton. class ){ if (instance== null ){ instance=new LazySingleton(); } } } return instance; } }

对上面的例子来说,我们当然也可以把锁加载方法上,那样的话每次获取实例都需 要获取锁,但其实对这个instance来说,只有在第一次创建实例的时候才需要同步,所以为了减少同步,我们先check了一下,看看这个 instance是否为空,如果为空,表示是第一使用这个instance,那就锁住它,new一个LazySingleton的实例,下次另一个线程来 getInstance的时候,看到这个instance不为空,就表示已经创建过一个实例了,那就可以直接得到这个实例,避免再次锁。这是第一个 check的作用。

第二个check是解决锁竞争情况下的问题,假设现在两个线程来请求getInstance,A、B线程同时发现instance为空,因为我们 在方法上没有加锁,然后A线程率先获得锁,进入同步代码块,new了一个instance,之后释放锁,接着B线程获得了这个锁,发现instance已 经被创建了,就直接释放锁,退出同步代码块。所以这就是check-lock-then check。

网上有很多文章讨论DCL的失效问题,我就不赘述了,Java5之后可以通过将字段

本文链接地址:https://www.jiuchutong.com/zhishi/311679.html 转载请保留说明!

上一篇:电脑学习网首发Linux端游新剑与魔法IP版支付ios端游和Android端游,可立即运营(学网新用什么电脑)

下一篇:React props全面详细解析

  • 零售价是含税价还是不含税价
  • 本月无销售额,但是有进项,需要认证吗
  • 货物退回是什么意思
  • 销售费用有业务招待费餐费么
  • 无形资产计税基础怎么算
  • 小规模纳税人进项发票怎么做账
  • 企业发给员工年终奖金
  • 公司组织员工旅游,起到的目的是什么
  • 成品油购进数据未同步怎么办
  • 行政事业单位工作经费使用范围
  • 长期借款产生的利息计入哪个科目
  • 增值税发票有哪些类型
  • 建筑安装工程费用人工费计算方式
  • 不动产公告期
  • 无法取得发票的费用如何入账
  • 一般纳税人取得免税农产品进项怎么抵扣
  • 企业关闭时国税、地税注销需要哪些手续,时间是多长?
  • 核定征收个体户怎么报税
  • MAC系统如何卸载重装安装W7系统
  • 配电安装施工方案
  • 住宿费和差旅费
  • 进口关税增值税计算公式
  • php排队系统
  • 腾达路由器默认网关
  • 收到银行退回余款
  • 企业所得税纳税调整事项有哪些
  • 外贸企业红字发票怎么冲
  • 商业折扣影响税费吗
  • 一般纳税人怎么交税
  • wordpress相关文章
  • php __destruct
  • thinkphp查询版本号
  • php主要用于
  • 申请高新技术企业收入要多少
  • pytorch开源项目
  • 让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析
  • 凭证过账后发现了错误,如何处理
  • 帝国cms文件夹介绍
  • sql实例命名规则
  • 销售折让的会计处理方法
  • 每月企业所得税怎么征收
  • 支付长期借款利息
  • 红字发票的数量乘以单价可以不等于含税金额吗
  • 建筑租赁公司是什么意思
  • 计提所得税后再结转本年利润吗
  • 拿工资要开发票,发票去哪儿开?
  • 报销为什么不能打给投保人
  • 多交增值税退税抵欠怎么处理
  • 无偿划拨土地需要提折旧吗
  • 土地管理费属于什么费用
  • 固定资产申请报告
  • 进项税额可以抵扣会计分录
  • 事业单位收个人所得税吗
  • 主营业务收入一定要结转成本吗
  • 酒店营业成本率怎么算
  • 往来是啥意思
  • sqlserver 查询锁
  • centos7.6怎么安装
  • 在sql中使用where子句指出的是
  • shell多进程并行返回值
  • 破解ssh端口
  • WINDOWS命令行为什么删除速度很快
  • linux系统bug
  • nacos监控服务
  • linker command failed with exit code 1 (use -v to see invocation)
  • UnityEditor.UI.dll' is in timestamps but is not known in assetdatabase
  • 基于android的app
  • cocos2dx怎么用
  • 可以查杀病毒的软件
  • 如何获得select选中的值
  • jquery model
  • node.js express koa
  • winpe文件下载
  • javascript基于什么的语言
  • express常用api
  • 电子税务局房产税税源信息采集
  • 增值税电子普通发票需要盖章吗
  • 空置房物业收费标准
  • 3%增值税专用发票成本多少钱
  • 迅雷网站官网下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设