一、内置锁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锁那得快递案列,城市和公里数两个属性;

最新文章

  1. 新手码农浅谈观察者模式(java语言简单实现)
  2. Maven学习总结(七)——eclipse中使用Maven创建Web项目
  3. OC静态库里NSClassFromString得到nil的解决
  4. (基础篇)PHP与Web页面交互
  5. String 、InputStream、Reader 的转换
  6. devexpress中用ChartControl生成柱状图
  7. PDF数据防扩散系统方案
  8. 小说mvvm
  9. 翻译 | Thingking in Redux(如果你只了解MVC)
  10. 万能动态库调用工具IDMA(InvokeDllMethodsAdvance)
  11. 【原】font-awesome IE6支持代码本人测试成功
  12. 开源一个自己造的轮子:基于图的任务流引擎GraphScheduleEngine
  13. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复
  14. H5_0001:localStorage本地存储
  15. 2019/3/1 IO流的学习总结
  16. 使用Navicat Premium对sqlserver 2008进行表、字段及用户权限的精细化管理
  17. ubuntu16.04下安装配置pl-svo
  18. BOM简单总结
  19. Navicat Premium 常用功能讲解
  20. C语言实现字符串IP与整数型IP的相互转换

热门文章

  1. OpenGL学习笔记(三)着色器
  2. Notes about "Exploring Expect"
  3. etcd学习(6)-etcd实现raft源码解读
  4. 微信小程序及公众号H5自动化测试攻略
  5. Nmap 简单功能介绍/TCP Header/常见端口
  6. ARM—异常中断处理
  7. STM32—位带操作
  8. @CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate
  9. 数据结构解析-HashTable
  10. UWP 动画之路径