位置: 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全面详细解析

  • 企业所得税汇算清缴
  • 所得税的会计分录怎么做
  • 税控盘维护费发票普通发票
  • 用友u8固定资产折旧怎么生成凭证
  • 房地产企业增值税管理办法
  • 生鲜配送公司财务制度
  • 财报一季度
  • 投资性房地产账面价值大于公允价值计入什么
  • 小微企业附加税税收优惠政策
  • 如何查询一个公司的资质情况
  • 通行费电子发票可以抵扣吗
  • 农产品进项税额计算扣除的方法
  • 稽查查补税款能缓缴
  • 怎么确认外购存货成本?
  • 核定和查账区别
  • 商品销售赠送部分要交税吗
  • 政府奖励企业款银行未收到会计分录
  • 农场管委会是什么性质单位
  • 盐酸编号
  • 土地增值税的征税对象,是村集体
  • 税务机关核定征收契税
  • 工程施工合同暂估价格入账会计分录
  • 化工厂危险废物种类以及处置方式
  • 产品入库的业务流程
  • 库存商品赠送会计分录
  • 怎么租办公室省钱
  • 想用u盘装系统怎么弄
  • win10系统没有声卡驱动
  • launcher.exe是什么,每次开机都是否需要进行更改
  • 企业在弥补亏损和提取法定盈余公积前一般不得分配利润
  • tensorflow dlib
  • 资产负债表的资产方能够提供的信息包括
  • php签到功能思路
  • 公司购买土地建厂房怎么入账
  • smart 变量表
  • vue调用高德js
  • flex布局用法
  • thinkphp写api
  • starting command
  • ldconfig命令怎么用
  • 公司买东西了怎么做账
  • 代收款用什么会计科目
  • 已付款收货未收到发票怎么做账
  • 债券发行费用包括
  • 增值税发票抵扣期限是多久
  • mongo mysql区别
  • 数据库my sql
  • SQL SERVER 将XML变量转为JSON文本
  • 过期报废产品销毁
  • 代收的运输费用怎么入账
  • 费用发票可以抵扣进项税吗
  • 金蝶财务软件怎么备份
  • 个税更改公司怎么操作
  • sql server分为哪两类
  • 车间设备折旧费计入产品成本吗
  • 购销合同印花税按70%
  • 无偿划转资产需要挂其他应收款吗
  • 投资子公司现金流量表
  • 应交增值税一转出未交增值税
  • 房产税计入管理费还是税金及附加
  • 边际成本是什么意思大白话
  • 中小企业筹资渠道和筹资方式
  • Windows Server 2016预览版10514系统镜像下载泄露
  • win10手机版微信uwp下载
  • pqtray.exe - pqtray 是什么进程 有什么用
  • win8超级按钮在哪
  • win7计算机窗口菜单栏
  • linux给文件赋全部权限
  • perl读取文件内容
  • python内置函数什么用来返回序列中的最大元素
  • unity3d基本操作
  • python怎么多进程
  • 高通芯片基于arm吗
  • javascript编程基础
  • python程序解析
  • 增值税借方有余额怎么调整
  • 江苏电子税务局社保缴费查询网站
  • 48岁了还有必要上环吗
  • 国家税务局宝鸡市税务局
  • 欠税多久法院立案
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设