lock的用法_try block

lock的用法_try blocktryLock有两个重载的方法,分别如下:booleantryLock();booleantryLock(longtime,TimeUnitunit)throwsInterruptedException;tryLock()会立马返回一个布尔值,如果获得了锁就返回false;如果没有获得锁就返回true。无论是返回true还是false,都会继续执行之后的代码。tryLock(longtime,TimeUnitunit)会等待指定的时间,如果时间到了还没获得锁就返

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

tryLock 有两个重载的方法,分别如下:

boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

tryLock() 会立马返回一个布尔值,如果获得了锁就返回 true;如果没有获得锁就返回 false。无论是返回 true 还是 false,都会继续执行之后的代码。

tryLock(long time, TimeUnit unit) 会等待指定的时间,如果时间到了还没获得锁就返回 false;如果在时间范围内获得了锁就立刻返回 true,不用等待时间结束。无论是返回 true 还是 false,都会继续执行之后的代码。

我们来拿第二个方法进行测试,代码如下:

public class T03_ReentrantLock3 { 
   
    Lock lock = new ReentrantLock();

    int count = 10;

    void m1() { 
   
        try { 
   
            lock.lock();
            for (int i = 0; i < count; i++) { 
   
                TimeUnit.SECONDS.sleep(1);
                System.out.println(i + 1);
            }
        } catch (InterruptedException e) { 
   
            e.printStackTrace();
        } finally { 
   
            lock.unlock();
        }
    }

    void m2() { 
   
        boolean tryLock = false;
        try { 
   
            // 尝试在 5 秒内获得锁
            tryLock = lock.tryLock(5, TimeUnit.SECONDS);
            System.out.println("m2..." + tryLock);
        } catch (Exception e) { 
   
            e.printStackTrace();
        } finally { 
   
            if (tryLock) { 
   
                lock.unlock();
            }
        }
    }

    public static void main(String[] args) throws InterruptedException { 
   
        T03_ReentrantLock3 reentrantLock3 = new T03_ReentrantLock3();
        new Thread(reentrantLock3::m1).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(reentrantLock3::m2).start();
    }
}

控制台输出如下:

1
2
3
4
5
6
m2...false
7
8
9
10

我们把变量 count 变为 2 再进行测试,控制台输出如下:

1
2
m2...true
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181541.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ManualResetEvent用法「建议收藏」

    ManualResetEvent用法「建议收藏」ManualResetEvent用法

    2022年7月13日
    12
  • python正则匹配中文或数字_Python匹配中文的正则表达式

    python正则匹配中文或数字_Python匹配中文的正则表达式正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。Python正则表达式简介正则表达式是一个特殊的字符序列,它能帮助你方…

    2022年7月25日
    12
  • myeclipse6.5注册码在线生成_机器码生成注册码在线

    myeclipse6.5注册码在线生成_机器码生成注册码在线在线生成网址http://key.858game.com/index.jspmyeclipse8.5注册码列表:      lipengxin      yLR8ZC-855575-645657520873808      2016-01-0310:18:40                       myeclipse10.注册

    2022年9月29日
    3
  • this指针的介绍和用法

    this指针的介绍和用法参考书籍,孙鑫视频教学,百度等。—下文举的例子是错误的,楼主若有空会对此进行修改。记录时间:2019-3-4this指针的介绍this指针是面向对象程序设计的一项概念,在C++中,它表示当前运行的对象。在实现对象的方法时,this指针来获得该对象自身的引用。正如classFamily类,创建了Family类的两个对象,即Chen1和Chen2。(1)假如Family类是”…

    2022年5月17日
    47
  • WPF数据采集与监控系统实战开发全记录【附源码 典藏版】[通俗易懂]

    WPF数据采集与监控系统实战开发全记录【附源码 典藏版】[通俗易懂]作为B站学习区非知名Up主,本人酷爱沉迷上位机无法自拔!人称”上位机大王“(滑稽)长期为大家提供各类WPF/上位机学习干货是我的信条!元旦在即,我又连肝一周,录制了一批WPF数据采集与监控系统项目开发实战!!录制内容,从上位机应用基础架构出发,全程代码实战,涉及内容包括串口通信、基础组件开发、用户控件动画、全局静态数据绑定等等。从无到有,完整实操,项目整体以MVVM思想模式设计开发,代码功能使用分层结构,逻辑与View解耦。认真看完全部视频,你可以了解到基本的串口通信方式,以及如何利用WPF的特性开发

    2022年6月8日
    41
  • 惊艳四射的意思_词语什么四射

    惊艳四射的意思_词语什么四射分享一些CSS3相关的按钮和导航,大部分素材应该都来自一些老外的设计,希望接下来的几篇文章对你会有所帮助,当然你的支持和点评也是我坚持做下去的动力。正文今天的这款CSS3按钮应该说是非常的光彩夺目,因为不仅它的色彩调得非常的和谐,更美妙的是如果你用chrome或者safari浏览器还能看到按钮发光的特效。以下是效果截图在线示例    |    源码下载这里的发光效果主要是如

    2025年6月28日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号