显示锁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锁那得快递案列,城市和公里数两个属性;
显示锁lock的更多相关文章
- 6.显示锁Lock 和 线程通信Condition
显示锁 Lock 一.用于解决多线程 安全问题的方式: synchronized: 1.同步代码块 2.同步方法 jdk1.5 后:第三种:同步锁Lock (注意:同步(synchro ...
- 显式锁(二)Lock接口与显示锁介绍
一.显式锁简介 显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制.显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一 ...
- 6、JUC--同步锁Lock
显示锁 Lock 在Java 5.0之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile .Java 5.0 后增加了一些 新的机制,但并不是一种替代内置 ...
- Java 显示锁 之 队列同步器AQS(六)
1.简述 锁时用来控制多个线程访问共享资源的方式,一般情况下,一个锁能够防止多个线程同时访问共享资源.但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁. 在Java 5.0之前,在协调对共享对 ...
- Java并发(基础知识)——显示锁和同步工具类
显示锁 Lock接口是Java ...
- 同步锁Lock & 生产者和消费者案例
显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...
- 多线程安全问题之Lock显示锁
package com.hls.juc; import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.Reentr ...
- Java中的显示锁 ReentrantLock 和 ReentrantReadWriteLock
在Java1.5中引入了两种显示锁,分别是可重入锁ReentrantLock和可重入读写锁ReentrantReadWriteLock.它们分别实现接口Lock和ReadWriteLock.(注意:s ...
- Java并发——显示锁
Java提供一系列的显示锁类,均位于java.util.concurrent.locks包中. 锁的分类: 排他锁,共享锁 排他锁又被称为独占锁,即读写互斥.写写互斥.读读互斥. Java的ReadW ...
随机推荐
- JAVA预科:Markdown基础语法
JAVA预科:Markdown语法 什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程序员群体所用,目前它已是全球最大的技术分享网站 GitHub 和技术问答网站 Stack ...
- Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
实际项目中遇到的需求 同一个链接需要加载不同的页面组件.根据用户所购买服务的不同,有不同的页面展现. 有一些不好的实现方式 直接把这几个组件写在同一个组件下,通过v-if去判断.如果这么做的话,甚至可 ...
- JUC学习笔记(四)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- CSS样式逐li添加,执行完,清空,反复执行
function change_light(el) { el.hide() let i = 0; function temp() { if (i > el.length - 1) { el.hi ...
- Python 列表解析式竟然支持异步?
PEP原文:https://www.python.org/dev/peps/pep-0530 PEP标题:PEP 530 -- Asynchronous Comprehensions PEP作者:Yu ...
- 走心的中级Android工程师跳槽经验分享
这些经验是我最近四个月,从准备面试到找到合适工作的汗水和泪水,希望对你们能有帮助! define 跳槽 跳槽前要思考的问题 钱不到位怎么办 心委屈怎么办 离职前的思考 确定要走时需要做的准备 行情怎么 ...
- java常见面试题总结2
JAVA必背面试题和项目面试通关要点 简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等. 一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链 ...
- Python - typing 模块 —— NewType
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- How to build your custom release bazel version?
一般情况下用源代码编译,生成的都是开发版本,这种版本做版本号校验方面会有很多问题,所以需要编译自己的release版本. export USE_BAZEL_VERSION=1.2.1 # 选择使用版本 ...
- Go的Channel发送和接收
先来看一道面试题: 对已经关闭的 chan 进行读写,会怎么样?为什么? 在上一篇学习 Go 协程的文章中,知道 go 关键字可以用来开启一个 goroutine 进行任务处理,但多个任务之间如果需要 ...