zoukankan      html  css  js  c++  java
  • 显示锁lock

    一、内置锁sync 和 显示锁lock概念

    1、synv锁又叫内置锁,不能中断,拿不到无限等待即阻塞;

    java自带关键字;

    隐式可重入;

    重入锁:锁对应对象要多次调用对应方法,如递归

    2、

     lock的lockinterruptiply意思是可中断的;语言层面的接口;

    其实现类reentrantlock 可重入锁,sync锁显示对应,可以理解为sync关键字在lock接口下的实现;

    3、重入锁:锁对应对象要多次调用对应方法,如递归;

    可重入锁,sync内置锁,多次获取和释放,计数器加1减1,方法结束则释放和减1

     4、公平锁和非公平锁

    公平锁是先到先得,对资源请求先到先得;

    无特殊要求,就是用sync内置锁;

    非公平锁效率高的原理:

     

     挂起是暂时移除cpu缓存,不是阻塞,阻塞是等待某一条件;

    因为B挂起状态解除需要时间,所以非公平锁效率更高;

    reentrantLock构造不传true,默认是非公平锁:

     5、读写锁,比一般排他锁性能高,但是写线程访问时候其他读和写线程都会被阻塞:

    即会有资源竞争,虽然不是同一个锁,但会拦截其他的锁;

     二、读写锁性能提示代码实现

    1.实体类

     2.业务类,方法

     3、主线程,主要作用创建若干个线程

    4.1、sync关键字内置锁

     4.2、读写锁实现

     结果是 显示锁读写锁 性能 远胜于 sync关键字内置锁;

    三、显示锁lock锁的等待和通知:Condition接口

    1、概念

    sync内置锁都是对锁对象而言,每个属性的变化都会改变该对象,尽量使用notifyAll通知唤醒,防止信号丢失;wait 是Object的方法;

    lock显示锁的等待通知是使用的它的Condition接口,通知尽量使用signal,而不是signalAll,一个lock显示锁可以new出多个condition,可以每个属性对应一个condition等待通知,所以使用signal,具体通知唤醒到哪个正在await的condition;

     2、代码实现

    2.1 两个lock显示锁各new一个condition:

    要同步的方法里面都是先获取锁,类似兵符,得先拿到兵符才能进入方法调兵遣将;

     2.2一个lock显示锁new多个condition

     结果一样,其余代码同sync锁那得快递案列,城市和公里数两个属性;

  • 相关阅读:
    SharePoint下载大文件失败 异常信息: system.OutOfMemoryException
    SharePoint Server 2010 容量管理:软件边界和限制
    PowerShell 备份sharepoint站点命令
    SharePoint 开发自定义WebService
    SPCAMLEditor 10分钟打造一个在线视频播放库
    使用PowerShell批量注册DLL到GAC
    设计模式之二 策略模式
    (转)Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim
    (转)iOS开发常用的宏 大家一起来收集~
    (转)iOS开发资源:推送通知相关开源项目PushSharp、APNSPHP以及Pyapns等
  • 原文地址:https://www.cnblogs.com/wmqiang/p/11674743.html
Copyright © 2011-2022 走看看