不可重入锁和可重入锁
不可重入锁也叫自旋锁
指当一个方法调用了锁之后,如持有本锁的另一个方法也想执行,将会进入等待。那么想要使用这个方法必须先释放锁方可调用
public class Lock{private boolean isLocked = false;public synchronized void lock() throws InterruptedException{while(isLocked){ wait();}isLocked = true;}public synchronized void unlock(){isLocked = false;notify();} }
可重入锁
指同一个线程里,持有此锁的两个方法将均会执行,不需要先释放,但是另一个持有此锁的线程必须等待锁释放后才能使用
java里,可重入锁,如 synchronized
public class Lock{boolean isLocked = false;Thread lockedBy = null;int lockedCount = 0;public synchronized void lock()throws InterruptedException{Thread thread = Thread.currentThread();while(isLocked && lockedBy != thread){wait();}isLocked = true;lockedCount++;lockedBy = thread;}public synchronized void unlock(){if(Thread.currentThread() == this.lockedBy){lockedCount--;if(lockedCount == 0){isLocked = false;notify();}}} }
不可重入锁例子的话,如下调用
public class Count{Lock lock = new Lock();public void print(){lock.lock();doAdd();lock.unlock();}public void doAdd(){lock.lock();//do something lock.unlock();} }
当调用print的时候,由于获得锁,导致doAdd使用时陷入while循环而等待,所以需要先将锁释放后才可使用
转载于:https://www.cnblogs.com/fengfenghuifei/p/10509661.html
不可重入锁和可重入锁相关推荐
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- 乐观锁和悲观锁,可重入锁和不可重入锁(1)
乐观锁和悲观锁,可重入锁和不可重入锁(1) 前言 感觉有一段时间没有写博客了呢.还是再接再厉吧,适当程度的总结能让我自己能够更加深入地巩固和理解自己所学习的一切. 还有,我很懒,而且我还是比较喜欢写日 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
- Java进阶:ReentrantLock实现原理解析(公平锁、非公平锁、可重入锁、自旋锁)
概述 本篇将介绍公平锁.非公平锁.可重入锁.自旋锁相关理论知识,同时结合相关源码和Demo进行解析,主要是以ReentrantLock作为例子. 公平锁 公平锁定义 公平锁是指线程按照申请所的顺序来获 ...
- 可重入锁和不可重入锁
转自https://www.cnblogs.com/dj3839/p/6580765.html 锁的简单应用 用lock来保证原子性(this.count++这段代码称为临界区) 什么是原子性,就是不 ...
- 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁
1. 线程调度 线程调度指的就是给线程分配使用处理器的过程.主要的调度方式有两种:协同式调度和抢占式调度. 1.1 协同式调度 线程完成自己的任务之后主动通知系统切换到另一个线程上. 优点: 实现简单 ...
- Java锁之可重入锁和递归锁
Java锁之可重入锁和递归锁 目录 Java锁之可重入锁和递归锁基本概念 Java锁之可重入锁和递归锁代码验证 小结 理论,代码,小结,学习三板斧. 1. Java锁之可重入锁和递归锁基本概念 可重入 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...
- java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)
1.公平锁.非公平锁 2.可重入锁(递归锁) 3.自旋锁 AtomicReference atomicReference = new AtomicReference();//原子引用线程 下面代码5秒 ...
最新文章
- 专访微软全球资深副总裁:中国AI正在爆发式崛起,千万不要复制美国,要建立自己的模式,才能做领导者
- 深入浅出任务队列机制,非常浅
- linux grouplist groupinstall groupremove 简介
- Python面向对象(一)
- ajax preview,In jQuery, using ajaxSend to preview the url built
- Java中的变量分类_开发简单的Java应用
- 手机相片删除了怎么恢复? 手机照片恢复方法汇总
- MFC:VS拖拽多个文件到控件并获取路径
- rk3568 android11 的 hardware架构学习纪要
- chrome 安装 gliffy 绘图插件以及使用
- 数据结构的形式定义、数据的逻辑结构、数据的存储结构
- Drug Discovery Today| 频繁命中化合物:高通量筛选中需警惕的假阳性结果
- java播放音频文件mp3
- Oracle Database 12c Security - 12. Audit for Accountability
- spring-boog-测试打桩-Mockito
- Java Web应用开发——作业一
- springboot + mina 实现串口通讯
- CS61B Project 0 项目记录
- 通信原理简明教程 | 数字调制传输
- VPRO 机械键盘灯亮
热门文章
- pycharm 开发app_windows及mac下开发Excel, python+xlwings开发环境配置
- 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
- Linux下开启mysql数据库的远程访问权限
- leetcode612. 平面上的最近距离(SQL)
- leetcode580. 统计各专业学生人数(SQL)
- 关系数据库——关系数据语言
- Redis:06---数据库管理
- Xcode的Architectures和Valid Architectures的区别
- Python(2)-第一个python程序、执行python程序三种方式
- 推荐算法--其他信息(07)