概述

tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。

代码

@Testpublic void testTryLock2() throws Exception {Lock lock = new ReentrantLock();new Thread() {@Overridepublic void run() {String tName = Thread.currentThread().getName();try {//获取不到锁,就等7秒,如果7秒后还是获取不到就返回falseif (lock.tryLock(7000, TimeUnit.MILLISECONDS)) {System.out.println(tName + "获取到锁!");} else {System.out.println(tName + "获取不到锁!");return;}} catch (Exception e) {e.printStackTrace();}try {for (int i = 0; i < 5; i++) {System.out.println(tName + ":" + i);}Thread.sleep(3000);} catch (Exception e) {System.out.println(tName + "出错了!!!");} finally {System.out.println(tName + "释放锁!!");lock.unlock();}}}.start();new Thread() {@Overridepublic void run() {String tName = Thread.currentThread().getName();try {//获取不到锁,就等7秒,如果7秒后还是获取不到就返回falseif (lock.tryLock(7000, TimeUnit.MILLISECONDS)) {System.out.println(tName + "获取到锁!");} else {System.out.println(tName + "获取不到锁!");return;}} catch (Exception e) {e.printStackTrace();}try {for (int i = 0; i < 5; i++) {System.out.println(tName + ":" + i);}} catch (Exception e) {System.out.println(tName + "出错了!!!");} finally {System.out.println(tName + "释放锁!!");lock.unlock();}}}.start();Thread.sleep(15000);//主线程}

运行结果

Thread-0获取到锁!
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0睡觉......
Thread-0醒了......
Thread-0释放锁!!
Thread-1获取到锁!
Thread-1:0
Thread-1:1
Thread-1:2
Thread-1:3
Thread-1:4
Thread-1释放锁!!

Lock的tryLock(long time, TimeUnit unit)方法相关推荐

  1. Lock锁-------tryLock()方法

    这一次主要学习Lock接口中的**tryLock()**方法. tryLock()方法是有返回值的,返回值是Boolean类型.它表示的是用来尝试获取锁:成功获取则返回true:获取失败则返回fals ...

  2. Lock 之 tryLock

    tryLock 有两个重载的方法,分别如下: boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws Interrupt ...

  3. redisson lock、tryLock分布式锁原理解析

    近期在处理程序有两个不同来源入口的时候,因为容易产生并发情况,造成会有脏数据产生,在同事推荐下使用redisson的锁来解决并发问题. 先上使用的一定程度封装的工具类: 工具类 @Service pu ...

  4. Redis - Redisson lock和tryLock原理解析

    Redisson 分布式锁原理 1. 工具类 package com.meta.mall.common.utils;import lombok.extern.slf4j.Slf4j; import o ...

  5. Redisson之lock()和tryLock()的区别

    Redisson之lock()和tryLock()的区别和原理解析 在Redisson中 lock() 方法 与 tryLock() 方法是有区别的! 我们先来阐述两者的区别,再分析它们的源码. lo ...

  6. RxJava/RxAndroid:timer(long delay, TimeUnit unit)

    RxJava/RxAndroid:timer(long delay, TimeUnit unit) timer起到定时器的作用,本例使用timer延迟3秒执行一个输出任务: package com.e ...

  7. Lock的tryLock()方法

    概述 tryLock()方法是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,这个方法无论如何都会立即返回.在拿不到锁时不会一直 ...

  8. git提交过程中遇到的 index.lock 问题导致无法提交的解决方法

    在提交代码的过程中,可能会遇到下面的问题: fatal: Unable to create 'C:/programLists/zzw-q1/.git/index.lock': File exists. ...

  9. Ubuntu系统 软件安装报错:Could not get lock /var/lib/dpkg/lock-frontend - open解决方法

    ​ 问题 在Ubuntu系统上安装使用apt-get install命令安装软件报以下错误: E: Could not get lock /var/lib/dpkg/lock-frontend - o ...

最新文章

  1. 操作系统的进程状态变迁图_1.操作系统是干什么的?
  2. SpringBoot 搭建
  3. php 文件上传页面模板,PHP文件上传类实例详解
  4. 发那科2021参数_三菱发那科常用参数对照
  5. 《我的视频我做主:Premiere Pro CS5实战精粹》——第一部分 基础篇 第1章 非线性剪辑基础 1.1 认识非线性剪辑...
  6. word List40
  7. 程序员应如何理解高并发中的协程
  8. vs2019编译c语言提示有病毒,关于VS2019代码编译的问题(C++)
  9. Flink的窗口聚合操作(Time\Count Window)
  10. 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
  11. 回归问题中代价函数选择的概率解释(Probabilistic interpretation)
  12. 控制 计算机某个程序自动开关,电脑自动开关机软件(示例代码)
  13. 使用数字全通滤波器对IIR滤波器进行相位补偿
  14. Halcon教程四:一个小技巧
  15. 甘特图首选解决方案-世界级甘特图控件(XGANTT) - XGantt甘特图中文官方网站
  16. 三年三个商业理论,你是否超越了?
  17. 撸了个反代工具, 可用于激活JRebel
  18. 微信小程序云函数处理客服消息
  19. 经典散文·1.地毯的那一端
  20. sg-uap mysql_SG-UAP常用注解介绍

热门文章

  1. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改
  2. php装箱,php兑现装箱算法
  3. windows和linux存储float,C语言float型数据在内存中的储存方式
  4. php里h和h的区别吗,编码h264h和h264b有什么区别
  5. hadoop实训报告总结及体会_管理工程学院举办电子商务实训表彰大会
  6. kafka多个消费者消费一个topic_kafka:一文读懂消费者背后的那点quot;猫腻quot;
  7. codeforces B. Design Tutorial: Learn from Life
  8. android手机电话铃声设置,安卓手机铃声怎么设置
  9. Linux free 命令详解
  10. java怎么接收前端请求_前端json post 请求 后端怎么接收