代码如下:

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之后-第二个线程无法获得锁的问题相关推荐

  1. C语言线程lock与unlock,lock()和unlock()是怎么实现【面试题详解】

    今天爱分享给大家带来lock()和unlock()是怎么实现[面试题详解],希望能够帮助到大家. 由lock()和unlock的源码可以看到,它们只是分别调用了sync对象的lock()和releas ...

  2. C语言线程lock与unlock,谈谈线程同步Lock和unLock

    Lock可以使用Condition进行线程之间的调度,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以 有选择性的调 ...

  3. 多个线程访问统一对象的不同方法_分析| 你未必真的了解线程安全,别骗自己,来看下怎么实现线程安全...

    世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 什么是进程? 电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的.比如下图中的QQ.酷狗播放器.电脑 ...

  4. Java高级-线程同步lock与unlock使用

    2019独角兽企业重金招聘Python工程师标准>>> 一.Lock与Synchronized区别 Java中可以使用Lock和Synchronized的可以实现对某个共享资源的同步 ...

  5. Linux学习之系统编程篇:互斥锁(pthread_mutex_init / lock / trylock / unlock / destroy)

    一.主要函数介绍 (1)定义锁 : pthread_mutex_t mutex; //互斥锁 数据类pthread_mutex_t (2)初始化锁: int pthread_mutex_init(pt ...

  6. Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信

    为什么80%的码农都做不了架构师?>>>    Lock(锁)&Condition(条件)实现线程同步通信 接下来介绍,java5线程并发库里面的锁.跟锁有关的类和接口主要是 ...

  7. 高并发:线程、线程锁与线程池(精华),文中附上一个手写代码实现线程池视频(c/c++语言)

    前文: 单线程--多线程的开启--线程锁--线程同步工具--手写连接池--连接池工具类. 一.线程 1.线程的概念 2.线程与进程的关系 3.定义: 区别:如上!!! 4.wait()和sleep() ...

  8. 抽象同步器AQS、CAS应用之--ReentrantLock,lock和unlock的流程、源码分析

    文章目录 1. AQS和CAS 1.1 CAS存在的bug:ABA问题 2. ReentrantLock和synchronized的区别 3. ReentrantLock的内部结构 3.1 lock. ...

  9. java lock可重入_一文彻底理解ReentrantLock可重入锁的使用

    java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能.而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也 ...

最新文章

  1. 数仓建模 项目_音乐数据项目火力全开,技能双倍提升!
  2. 用深层神经网络解释大脑的运作
  3. 子元素绝对定位absolute后,自动撑开宽度
  4. debian linux修改语言,Debian Linux系统下英文系统切换为中文
  5. 全球及中国汽车涂料市场盈利预测与发展策略分析报告2022版
  6. Python range 函数 - Python零基础入门教程
  7. HDU 1223 还是畅通工程(最小生成树prim模板)
  8. 【Kafka】Kafka 如何读取offset topic内容 (__consumer_offsets)
  9. AIX和LINUX主机 CPU 内存 磁盘使用率监控
  10. python打印tensor_如何在TensorFlow中打印SparseTensor内容?
  11. mysql 5.1 1067,mysql服务1067错误多种解决方案汇总
  12. BlackBerry7290上网精髓
  13. compute的c语言用法,词汇精选:compute的用法和辨析
  14. 养乐多深耕三线城市加码长、珠三角;欧康维视在港交所主板挂牌上市 | 美通企业日报...
  15. 跟李沐学深度学习-softmax回归
  16. reactive() 函数
  17. [随笔所想] 学英语打卡2000天碎碎念
  18. SpringBoot2.x(三)热部署devtool和配置文件自动注入实战
  19. node04-buffer
  20. Cis-Glyoxal-Cyclam ,CAS: 74199-16-9,CIS-十氢-1H,6H-3A,5A,8A,10A-四氮杂芘

热门文章

  1. mega盘要_[MEGA DEAL]支付您想要的:2018机器学习套件(99%折扣)
  2. 巡检系统:维护设备正常运转,降低安全生产风险,企业必备
  3. Android 11 微信,QQ ,微博 分享适配
  4. 【观察】DXC Technology:回归初心,再聚焦与新布局
  5. 前端笔记之微信小程序(二){{}}插值和MVVM模式数据双向绑定指令API
  6. Python for Maya DCC工具插件开发学习记录(一)
  7. 什么是推荐系统与常见的推荐系统评价指标
  8. 2021年升降机司机考试试卷及升降机司机考试试题
  9. Ubuntu14.04安装搜狗拼音
  10. 友华光猫设置虚拟服务器,中兴光猫sendcmd常用命令