Java-可重入锁(ReentrantLock)
可重入锁:与同步锁(Synchronize)语义行为基本相同,但有更强大的功能获取锁公平设置、测试锁 tryLock 、锁的获取顺序等等。
构造方法:1.ReentrantLock()//创建一个可重入锁2.ReentrantLock(boolean fair)//带公平策略锁,默认为false,是种非公平模式。
常用方法:1.void lock() 请求加锁
2.void unlock() 尝试释放该锁
3.Boolean tryLock() 尝试获得锁,仅在无其他线程持有锁时得到该锁
4.int getHoldCount() 由当前线程持有,锁数。
5.protected Thread getOwner()
6.protected Collection<Thread> getQueuedThreads() 返回试图获得该锁的线程集合
7.Boolean isHeldCurrentThread() 判断锁是否被当前线程持有
8.Boolean isLocked() 查看锁是否被持有。
自己实现:public class Man {volatile static int i=0;private Lock lock;public Man(){lock = new ReentrantLock();}public void eat(){System.out.println("人吃饭..."+i);}public void work(){System.out.println("人工作..."+i);}public void sleep(){System.out.println("人睡觉..."+i);}public void life(){lock.lock();eat();work();sleep();try{}catch (Exception e){}finally {lock.unlock();}}
}-----------------------------------------------------------------public class Reentrant {@Testpublic void Test() {ExecutorService executor = new ThreadPool().getCachedThreadPool();Man man = new Man();for(int i=0;i<4;i++){executor.execute(new Runnable() {@Overridepublic void run() {man.life();Man.i++;}});}executor.shutdown();try {executor.awaitTermination(1,TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}}
}
Java-可重入锁(ReentrantLock)相关推荐
- java多线程---重入锁ReentrantLock
1.定义 重入锁ReentrantLock,支持重入的锁,表示一个线程对资源的重复加锁. 2.底层实现 每个锁关联一个线程持有者和计数器,当计数器为0时表示该锁没有被任何线程持有,那么任何线程都可能获 ...
- Java多线程——重入锁ReentrantLock源码阅读
上一章<AQS源码阅读>讲了AQS框架,这次讲讲它的应用类(注意不是子类实现,待会细讲). ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样的,我们来看看类的注解 ...
- java中的账户冻结原理_java可重入锁(ReentrantLock)的实现原理
前言 相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么 ...
- Java 重入锁 ReentrantLock 原理分析
1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似.所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生 ...
- 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...
- Java 可重入锁内存可见性分析
转载自 深度好文 | Java 可重入锁内存可见性分析 一个习以为常的细节 之前在做 ReentrantLock 相关的试验,试验本身很简单,和本文相关的简化版如下:(提示:以下代码均可左右滑动) p ...
- java 可重入锁 clh_Java并发编程系列-(4) 显式锁与AQS
4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...
- java可重入锁与不可重入锁
所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的. synchronized 和 ReentrantLock 都是可重入锁. 可重 ...
- Java 可重入锁 不可重入锁
文章目录 Java 可重入锁 & 不可重入锁 概述 论证synchronized是可重入锁: 论证Lock是可重入锁: 自定义不可重入锁: Java 可重入锁 & 不可重入锁 概述 可 ...
- 重入锁ReentrantLock详解
重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁.除此之外,该锁的还支持获取锁时的公平和非公平性选择. 在AQS实现中,当一个线程调用Mute ...
最新文章
- 操作系统修炼秘籍(1):秘籍简介
- EOS生产区块:解析插件producer_plugin
- 电源功耗压力测试软件,开关电源负载测试经验分享——这篇三分钟小文章着实令人“心动”...
- Web框架——Flask系列之宏、继承、包含(十八)
- Java中锁的使用和实现
- 桌面虚拟化之本地模式(离线模式)大比拼
- 常用工具——Rsync
- vscode二次开发_vscode 扩展开发从入门到颈椎病康复
- uploadify 3.1 /3.2 在Firefox,Chrome 浏览器下,进入页面请求两次问题解决办法。
- pdf打印机如何设置双面打印
- 比赛竞猜投注类问题概率模型
- 数据分析案例-航空公司客户价值分析(聚类)
- 网站地图是什么,怎么制作和查看网站的地图呢?
- 用aspose转换文档成PDF导致中文变成方框
- 在CMD里使用命令实现CMD全屏
- 4kw机柜无通道封闭CFD模拟分析及优化(下篇) -孙长青
- 避障机器人程序c语言,移动机器人的避障实验设计+源程序+流程图.doc
- Js定时器倒计时及堆叠问题解析(附源码)
- 移动适配-vw/wh
- 逮到一个阿里 10 年老 测试开发,聊过之后收益良多...
热门文章
- python中fig_Matplotlib画图中fig,ax,plt的区别和联系
- Android Studio 视频教程分享
- 你知道机器视觉在物流分拣自动化系统中是如何工作的么?
- 电信重组,新机遇还是新危机?
- Gated Fully Fusion for Semantic Segmentation(GFF)
- 火狐怎么导入旧的火狐数据_Firefox的Sweet Black Theme
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
- xlnt踩坑记2_自己动手丰衣足食
- 冰与火之歌权力的游戏第七季第一集里面的士兵插曲音乐
- 电脑一声,电脑主机滴的一声是什么意思 ?