package xyz.jangle.thread.test.n2_4.lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.StampedLock;
/**
* 比较可重入锁和不可重入锁的差别。
* @author Administrator
*
*/
public class M3 {
private static ReentrantLock lock = new ReentrantLock();
private static StampedLock lock2 = new StampedLock();
private static int i = 0;
public static void main(String[] args) {
test();
// test2();
}
private static void test() {
lock.lock();
try {
System.out.println("123");
if(i++ < 10) {
test(); //可重入锁,可以重复调用lock()方法。
}
} finally {
lock.unlock();
}
}
private static void test2() {
long stamp = lock2.writeLock();
try {
System.out.println("123");
if(i++ < 10)
test2(); //此处会死锁,一直等待lock2释放锁
} finally {
lock2.unlockWrite(stamp);
}
}
}
相关推荐
【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真
本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。
线程数:设多少最合理?
当我刷到这条脉脉的时候,想到当年老板面试我的时候,拿多线程问题虐我时,想想当时太难了。悄悄给大家看几道阿里必问的面试题,测测能完美的回答几道呢?有没有一种一定能保证线程安全的代码写法?(...
Winform美化框架AntdUI中Table的使用方法
使用核心注意点: 数据模型中属性名需要完全与new Column里的列名一致否则添加数据源则无法读取到详细内容。
线程数:射多少最合理?
最近听说有小伙伴只靠两个技术点,就拿了两个offer...当时我脑海只有两个想法闪过我不信!两个知识点,就能拿俩offer?到底是哪两个知识点呢?这么神奇!!!emmm,怎么拿的offe...
无人机蜂群作战设计技术详解
构建防御网络,拦截敌方无人机或导弹;无人机蜂群作战设计技术是一种创新的军事应用概念,它基于生物仿生学原理,通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,以执行复杂多样的军事任务。无人机蜂群作战的概念源于自然界中蜜蜂、蚂蚁等生物群体的行为模式,这些生物群体通过简单的个体间的信息交互和分工协作,能够完成远远超出单一个体能力的复杂任务。其中,无人机群体是执行任务的主体,指挥控制系统负责任务分配和决策,通信数据链则保障无人机群体与指挥控制系统之间的信息交换。
Unity零基础到进阶 | Unity中的内存泄漏全解析,原因、排查及避免
Unity 内存泄漏并非传统C++语境中的野指针或未释放堆内存,而是基于其「托管内存(C#)+ 原生内存(引擎/非托管)」双架构的特殊问题——即已废弃、不再被业务逻辑使用的内存块,无法被引擎或系统自动回收,持续占用内存空间,最终引发内存暴涨、GC卡顿、OOM(内存溢出)崩溃,其中移动端、主机端受影响最显著。 Unity 内存主要分为三类,其中泄漏仅发生在前两类,栈内存因系统自动分配/释放,无泄漏风险:
腾讯65W的Java架构师,概括的520页的面试笔记,拿到手立马分享
前言 我在京东从事程序员五年,我在16年认了一位在腾讯年薪650k的师傅前些天去他家面经,我问了他一连串的问题,都是比较主流的技术考点,他说,现在的技术虽然不断在创新,但原有的技术点不会改变,现在的面试考点和原来的也不会有太大的差别。他给我了一个腾讯最新的面试题材PDF。这可不容易弄到的,可是我花了两瓶茅台才弄到的 所以大家一定要珍藏起来,哈哈哈! 现在金三银四跳槽季正在火热进行中,相信很多小伙伴在为跳槽做准备,所以我特意从他那里要了一份520余页的面试手册,俗话说得好,他山之石,可以攻玉,...
Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导
在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。
互联网的架构“高并发”,该怎么玩?
最近听说有小伙伴只靠两个技术点,就拿了两个 offer...当时我脑海只有两个想法闪过我不信!两个知识点,就能拿俩 offer?到底是哪两个知识点呢?这么神奇!!!emmm,怎么拿的 o...
基于STM32设计的水下水质检测装置(微信小程序)(205)
本项目设计了一款基于STM32微控制器为核心的水下水质检测设备,该设备具有高度集成化、智能化的特点,能够实时监测水深、温度、浊度及溶解性总固体(TDS)等关键水质参数,并通过4G网络将数据上传至腾讯云IOT物联网平台,实现远程监控和数据分析。同时,为了便于操作和移动观测,还配套开发了微信小程序,用户可通过微信小程序实时查看并控制设备的各项功能,如调整下潜深度等。
C++11、C++14 和 C++17 标准新特性详解
特性C++11C++14C++17auto类型推导✅范围 for 循环✅Lambda 表达式✅✅✅智能指针✅移动语义✅nullptr✅统一初始化{}✅✅constexpr✅✅✅✅数字分隔符✅结构化绑定✅✅✅文件系统库✅。
做到阿里P7和考上985/211哪个更难?
最近听说有小伙伴只靠两个技术点,就拿了两个offer...当时我脑海只有两个想法闪过我不信!两个知识点,就能拿俩offer?到底是哪两个知识点呢?这么神奇!!!emmm,怎么拿的offe...
AI时代的软件质量保证新方法论
3.2.1 质量保证的方法论 质量保证(Quality Assurance, QA)是一种系统化的方法,用于确保产品或服务符合预定的质量标准。在AI时代,软件质量保证的方法论需要适应不断变化的AI技术和应用场景。 3.2.1.1 质量管理体系的构建 首先,构建一个完善
到底多大并发才算“高并发”?一文带你全面认识高并发!
最近听说有小伙伴只靠两个技术点,就拿了两个offer...当时我脑海只有两个想法闪过我不信!两个知识点,就能拿俩offer?到底是哪两个知识点呢?这么神奇!!!emmm,怎么拿的offe...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
字节跳动这么缺人?一个二本程序员被捞了9次...
点击“开发者技术前线”,选择“星标????”在看|星标|留言, 真爱最近听说有小伙伴说自己简历一年内被字节捞了9次,作为二本的他如愿以偿的进了大厂,最后只靠两个技术点,就拿了两个off...
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
并发理解 part1
线程池 线程池的好处 线程池适用的场合: 增减线程的时机: 增减线程的特点:
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
并行分布式框架:Celery、rq、funboost
Celery是一个异步任务的调度工具,也可以叫做 "分布式任务队列(Distributed Task Queue)"。
并发编程:执行器:7、取消任务(future.cancel())
future.cancel() 在执行器内取消任务
并发编程:并行反应式流:遍历流(forEach,forEachOrdered)
遍历流(forEach , forEachOrdered)
并发编程:并行反应式流:排序流(sorted、unordered)
主要内容 sorted() 排序流(Stream中的元素需要实现Comparable接口,否则传入Comparator参数对元素进行排序) unordered() 消除相遇顺序(以提升并行流的性能)注:并行流在处理有序数据结构时,性能会有很大影响) forEachOrdered 如果使用forEach方法,是不会考虑相遇顺序的,若要输出有序的元素,则使用forEachOrdered方法。 一、主程序 package xyz.jangle.thread.test.n6_8.sorted; impo
并发编程:fork/join框架:异步地运行任务(CountedCompleter)
CountedCompleter,异步地运行任务。
并发编程:fork/join框架:在任务中抛出异常
在任务中抛出异常,主程序中判断异常。
并发编程:并发集合:变量句柄(VarHandle)
变量句柄(VarHandle)
并发编程:并行反应式流:编程流(Flow.Subscriber)
在反应式流上反应式编程。(主要讲订阅功能)
并发编程:CompletableFuture 异步地完成和关联任务
CompletableFuture 异步地完成和关联任务
并发编程:并发集合:带延迟元素的线程安全队列DelayQueue
带延迟元素的线程安全队列DelayQueue
234



被折叠的 条评论
为什么被折叠?



