C语言线程lock与unlock,锁求解关于lockunlock之后-第二个线程无法获得锁的问题
代码如下:
public class SynchronizedAndLockDemo {
public static void main(String[] args) throws InterruptedException {
Writer writer = new Writer();
Thread t1 = new Thread(() -> {
writer.testTryLock();
});
t1.setName("t1");
Thread t2 = new Thread(() -> {
writer.testTryLock();
});
t2.setName("t2");
t1.start();
t2.start();
}
}
class Writer {
Lock lock = new ReentrantLock();
public void testTryLock() {
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":" + lock.tryLock());
try {
if (lock.tryLock(5000, TimeUnit.MILLISECONDS)) {
lock.lock();
System.out.println(threadName + " get the lock ...");
// Thread.sleep(2000);
// System.out.println(threadName + " sleep 2s");
} else {
System.out.println(threadName + " can't get the lock ...");
}
} catch (Exception e) {
} finally {
if (lock.tryLock()) {
lock.unlock();
System.out.println(threadName + " unlock");
}
}
}
}
执行结果如下:
t1:true
t2:false
t1 get the lock ...
t1 unlock
t2 can't get the lock ...
按理说,t1释放锁后 t2是在5秒内获取不到锁才终止,但是t1在5s内已经完成了任务,并且释放了锁,为什么t2仍然无法获得锁呢?是t1尚未释放锁吗?那lock.unlock()方法是未生效的吗?百思不得其解
跪求大佬解惑
C语言线程lock与unlock,锁求解关于lockunlock之后-第二个线程无法获得锁的问题相关推荐
- C语言线程lock与unlock,lock()和unlock()是怎么实现【面试题详解】
今天爱分享给大家带来lock()和unlock()是怎么实现[面试题详解],希望能够帮助到大家. 由lock()和unlock的源码可以看到,它们只是分别调用了sync对象的lock()和releas ...
- C语言线程lock与unlock,谈谈线程同步Lock和unLock
Lock可以使用Condition进行线程之间的调度,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以 有选择性的调 ...
- 多个线程访问统一对象的不同方法_分析| 你未必真的了解线程安全,别骗自己,来看下怎么实现线程安全...
世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 什么是进程? 电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的.比如下图中的QQ.酷狗播放器.电脑 ...
- Java高级-线程同步lock与unlock使用
2019独角兽企业重金招聘Python工程师标准>>> 一.Lock与Synchronized区别 Java中可以使用Lock和Synchronized的可以实现对某个共享资源的同步 ...
- Linux学习之系统编程篇:互斥锁(pthread_mutex_init / lock / trylock / unlock / destroy)
一.主要函数介绍 (1)定义锁 : pthread_mutex_t mutex; //互斥锁 数据类pthread_mutex_t (2)初始化锁: int pthread_mutex_init(pt ...
- Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信
为什么80%的码农都做不了架构师?>>> Lock(锁)&Condition(条件)实现线程同步通信 接下来介绍,java5线程并发库里面的锁.跟锁有关的类和接口主要是 ...
- 高并发:线程、线程锁与线程池(精华),文中附上一个手写代码实现线程池视频(c/c++语言)
前文: 单线程--多线程的开启--线程锁--线程同步工具--手写连接池--连接池工具类. 一.线程 1.线程的概念 2.线程与进程的关系 3.定义: 区别:如上!!! 4.wait()和sleep() ...
- 抽象同步器AQS、CAS应用之--ReentrantLock,lock和unlock的流程、源码分析
文章目录 1. AQS和CAS 1.1 CAS存在的bug:ABA问题 2. ReentrantLock和synchronized的区别 3. ReentrantLock的内部结构 3.1 lock. ...
- java lock可重入_一文彻底理解ReentrantLock可重入锁的使用
java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能.而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也 ...
最新文章
- 数仓建模 项目_音乐数据项目火力全开,技能双倍提升!
- 用深层神经网络解释大脑的运作
- 子元素绝对定位absolute后,自动撑开宽度
- debian linux修改语言,Debian Linux系统下英文系统切换为中文
- 全球及中国汽车涂料市场盈利预测与发展策略分析报告2022版
- Python range 函数 - Python零基础入门教程
- HDU 1223 还是畅通工程(最小生成树prim模板)
- 【Kafka】Kafka 如何读取offset topic内容 (__consumer_offsets)
- AIX和LINUX主机 CPU 内存 磁盘使用率监控
- python打印tensor_如何在TensorFlow中打印SparseTensor内容?
- mysql 5.1 1067,mysql服务1067错误多种解决方案汇总
- BlackBerry7290上网精髓
- compute的c语言用法,词汇精选:compute的用法和辨析
- 养乐多深耕三线城市加码长、珠三角;欧康维视在港交所主板挂牌上市 | 美通企业日报...
- 跟李沐学深度学习-softmax回归
- reactive() 函数
- [随笔所想] 学英语打卡2000天碎碎念
- SpringBoot2.x(三)热部署devtool和配置文件自动注入实战
- node04-buffer
- Cis-Glyoxal-Cyclam ,CAS: 74199-16-9,CIS-十氢-1H,6H-3A,5A,8A,10A-四氮杂芘
热门文章
- mega盘要_[MEGA DEAL]支付您想要的:2018机器学习套件(99%折扣)
- 巡检系统:维护设备正常运转,降低安全生产风险,企业必备
- Android 11 微信,QQ ,微博 分享适配
- 【观察】DXC Technology:回归初心,再聚焦与新布局
- 前端笔记之微信小程序(二){{}}插值和MVVM模式数据双向绑定指令API
- Python for Maya DCC工具插件开发学习记录(一)
- 什么是推荐系统与常见的推荐系统评价指标
- 2021年升降机司机考试试卷及升降机司机考试试题
- Ubuntu14.04安装搜狗拼音
- 友华光猫设置虚拟服务器,中兴光猫sendcmd常用命令