不可重入锁和可重入锁

不可重入锁也叫自旋锁

  指当一个方法调用了锁之后,如持有本锁的另一个方法也想执行,将会进入等待。那么想要使用这个方法必须先释放锁方可调用

  

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家长必看 父母须知孩子社交圈九要点(组图)

孩子在慢慢的长大,总要接触外面的环境、接触到更多的人,也需要自己的社交圈。那么孩子的社交圈父母要知道9点。 1、妈妈是第一个“好朋友” 孩子社交的第一步从出生就开始了。虽然小小的他躺在那里还不能说话,但是通过哭、目光接触、笑等表…

2020-4-1

题目一 页面加载图片的时候&#xff0c;可能由于各种原因导致加载失败。 为了页面的人性化&#xff0c;在失败的时候通常会使用一张给定的图片替代。 <img src"logo.gif" onerror"javascript:this.srcdefault.gif" > //上面代码本来要加载logo.gif…

NGINX 配置超时时间

一、啥时候用到 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 用来设置请求资源和服务器返回的时间&#xff0c;保证一个请求占用固定时间&#xff0c;超出后报504超时&#xff01;这…

kettle变量(param命名参数)

1、定义&#xff1a; 编辑-设置-命名参数 在当前界面下定义参数名称和缺省值。 2、引用&#xff1a;原始数据 通过${var}引用变量 输出 注&#xff1a;1、字符串在命名参数引用是需要添加单引号的&#xff0c;但位置参数是不需要进行转译&#xff1b; 2、引用变量时需要勾选替换…

Excel操作

区间范围计算 方法一:用IF函数 方法二:构建一个辅助区域&#xff0c;用VLOOKUP函数 方法一:用IF函数 在F3中输入:IF(E3>90%,5%,IF(E3>80%,4%,IF(E3>70%,3%,IF(E3>60%,2%,1%)))) 向下拖动,搞定。 示例&#xff1a; IF(BB2<0.5,"50及以下",IF(AND(BB2&g…

养心灵,才能美容颜,拥有好日子(图)

“养心&#xff0c;就是在养颜”&#xff0c;说得多好啊。我们的脸是不会说谎的镜子&#xff0c;即使再巧妙的掩饰&#xff0c;也会在脸上显露出蛛丝马迹。 一个尖刻的人&#xff0c;嘴角的纹路必然多而杂;一个工于心计的人&#xff0c;脸色必定是阴沉暗淡的;一个无知的人&…

2020-4-2

题目一 利用事件冒泡原理实现了获取td单元格内容的功能。 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> #table{ width:300px; height:100px; border:1px solid #ccc; border-c…

AGC008D K-th K

题意简述&#xff1a;给你一个长度为\(N\)的整数序列\(x\)&#xff0c;请判断是否存在一个满足下列条件的整数序列\(a\)&#xff0c;如果存在&#xff0c;请构造一种方案。 1.\(a\)的长度为\(N^2\)并且满足数字\(1,2,3,\cdots,N\)都各出现恰好\(N\)次 2.对于\(1<i<N\)&am…

(一)prometheus与grafana介绍与安装

#&#xff08;1&#xff09;prometheus介绍 prometheus是一款 强大的监控系统和时序系统 采集数据&#xff1a; 在目标主机上安装exporter, exporter组件会在目标处收集监控数据, 并暴露一个http接口供prometheus查询, prometheus通过pull的方式来采集数据; 目前exporter已经采…

男人该知道的人生感悟(图)

一、家庭篇&#xff1a; 1、孝敬自己的父母&#xff0c;男人往往没有女人心细&#xff0c;所以你要经常提醒自己&#xff0c;常回家看看&#xff0c;不要等到“子欲养而亲不待”。 2、遇到事情&#xff0c;多听听父母的意见&#xff0c;他们是这个世界上最爱你的人。 3、好好…

2020-4-3

题目一 如何让IE8和IE8以下浏览器支持HTML5 <!–[if IE]> <script src"http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]–>上面这段代码仅会在IE浏览器下运行&#xff0c;还有一点需要注意&#xff0c;在页面中…

三维人脸前期调研

多张人脸照片进行3D人脸重建一种开源方法VisualSMeshlab目前的主流是VisualSFM&#xff08;找出各张照片中的特征点&#xff0c;进行两两匹配&#xff0c;根据匹配的结果&#xff0c;利用射影定理计算得到相机位置等场景信息&#xff0c;将场景信息与原始照片结合在一起得到照片…

git 报错:was cached in the local repository, resolution will not be reattempted until the upda

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Could not resolve dependencies for project com.foreveross:gaei-syncpm:jar:0.0.1-SNAPSHOT: Failure to find com.oracle.jdbc:ojd…

6000个边缘Kubernetes节点驱动城市80万次智能停车,如何成为可能?

城市的街道因为汽车数量的增长越来越繁忙&#xff0c;对于驾车一族而言&#xff0c;在热门区域寻找停车场更是无比头痛的事情。然而与此同时&#xff0c;其实也许很多办公楼、住宅楼、酒店和公共车库中仍有许多付费停车的资源未被充分利用。 ParkBee就是这样一家为城市提供智能…

英语学习之道小谈

想学好英语&#xff0c;首先要培养对英语的兴趣。兴趣是最好的老师&#xff0c;是学习英语的巨大动力&#xff0c;有了兴趣&#xff0c;学习就会事半功倍。我们都有这样的经验&#xff1a;喜欢的事&#xff0c;就容易坚持下去&#xff1b;不喜欢的事&#xff0c;是很难坚持下去…

2020-4-4

题目一 post方式get方式提交表单的主要区别? post一般用于传递较大的数据&#xff0c;在数据传递之前会有打包操作&#xff0c;所以可能会造成数据传递数据相对较慢的情况&#xff0c;不过传输的数据都能够被正确的解析&#xff0c;不会出现类似于中文乱码的状况。通过url链接…

python 进程与线程(理论部分)

一、理论部分 一 什么是进程 进程&#xff1a;正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 举例&#xff08;单核多道&#xff0c;实现多个进程的并发执行&#xff09;&#xff1a; egon在一个时间段内有很多任务要做&#xff1a;python备课的任务&#xff0c;…

Maven : 将 Jar 安装到本地仓库和 Jar 上传到私服

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Jar的maven配置 <dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId&g…

Flink 1.7.2 dataset transformation 示例

Flink 1.7.2 dataset transformation 示例 源码 https://github.com/opensourceteams/flink-maven-scala概述 Flink transformation示例map,flatMap,filter,reduce,groupBy,reduceGroup,combineGroup,Aggregate(sum,max,min)distinct,join,join funtion,leftOuterJoin,rightOut…

2020-4-5

题目一&#xff1a; <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <script> window.onloadfunction(){let txtdocument.getElementById("txt");let stdocument.getElementById("st");let formdocumen…