显示锁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 ...
随机推荐
- MSTP
目录 一.生成树存在的问题 二.MSTP 三.MSTP的网络层次 四.MSTP的端口状态 五.MSTP的保护功能 一.生成树存在的问题 STP和RSTP的问题 PVST的问题 二.MSTP 多生成树 ...
- vulnhub靶机-XXE Lab 1
目录 信息收集 漏洞利用 信息收集 扫描目标主机,ip为192.168.88.154 nmap扫描结果 存在robots.txt文件.直接访问其中的admin.php显示404,加一层目录访问/xxe ...
- 干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?
这是在某论坛看到的一名同行的吐槽: 我干了差不多5年,不过给人感觉跟只有两三年的人一样. 我觉得我不适合干程序员,主要是新东西的接受能力比其他人慢,Android技术又更新得很快,感觉总是跟不上.年纪 ...
- 深入理解Https如何保证通信安全
作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...
- MySQL基本类型、操作
MySQL 前言(一些废话,可以不看) 为什么学习数据库呢,大家都知道,为了学习删库跑路,因为数据库在工作中起着至关重要的作用,只会写代码的是码农:学好数据库,基本能混口饭吃:在此基础上再学好操作系统 ...
- 8.算法竞赛中的常用JAVA API :Calendar日期类
8.算法竞赛中的常用JAVA API :Calendar日期类 摘要 在蓝桥杯中有关于日期计算的问题,正好java中的Date类和Calendar类提供了对日期处理的一些方法.Date类大部分方法已经 ...
- Python之简单的神经网络
from sklearn import datasets from sklearn import preprocessing from sklearn.model_selection import t ...
- Block循环引用详解
前言 在项目中经常用到block,使用不当就很容易因为循环引用而造成内存泄漏.本文分析了block循环引用形成原因以及处理办法,如果有什么不对或者疑问请留言. 什么情况下block会造成循环引用 bl ...
- Linux 进程间传递文件描述符
文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...
- Linux部署Redis服务器
一,Redis介绍 Redis如今已经成为Web开发社区最火热的内存数据库之一,随着Web2.0的快速发展,再加上半结构数据比重加大,网站对高效性能的需求也越来越多. 而且大型网站一般都有几百台或者更 ...