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 ...
最新文章
- 深入理解javascript原型和闭包(4)——隐式原型
- 如何在Word,Excel和PowerPoint 2010中裁剪图片
- python写剧情文字游戏_文字游戏引擎试用心得之一:Ren'py 和 Fungus
- java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- 支付宝首页新增商家服务进度卡片 目前正在灰度测试中
- SpringMvc-MockMvc
- zw版【转发·台湾nvp系列Delphi例程】HALCON DivImage2
- qt自定义QtWidgets
- linux 中文字体 推荐,Linux 下何种字体最好看
- 如何发送gmail邮件_如何从R和Gmail发送电子邮件
- 不要再问芝士和奶酪有什么区别了!一次解释清楚
- Mp3(ID3v2)格式文件解析
- linux查看dns命令
- opencv中waitKey()的作用
- c++虚函数实现原理
- 华为荣耀总裁刘江峰正式宣告离职
- SpringCloud之搭建PiggyMetrics项目
- 教你怎么学好Java
- html5 载入另一个页面,如何将一个html页面中嵌入另一个html页面
- Java web项目目录介绍