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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CF B. Kolya and Tandem Repeat

    CF B. Kolya and Tandem Repeat

    2022年2月5日
    81
  • 利用STM32F103精确控制步进电机「建议收藏」

    利用STM32F103精确控制步进电机「建议收藏」**利用STM32F103控制步进电机精确角度转动**欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,…

    2022年6月1日
    34
  • ajax跨域请求jsonp完整示例

    ajax跨域请求jsonp完整示例最经用到jsonp(ajax)的跨域请求,在这分享给大家,有需要用到的一看就能明白。具体步骤如下:1.首先客户端即页面script中调用代码如下:        varcardNumber="***********"; $.ajax({ type:"GET", url:’你请求的服务地址?idCard=’+cardNumber, dataType:…

    2022年6月17日
    100
  • 英语发音规则—ea字母组合发音规律「建议收藏」

    英语发音规则—ea字母组合发音规律「建议收藏」英语发音规则ea字母组合发音规律一、总结一句话总结:字母组合ea的发音规律,在学习字母组合在单词中的发音规律以前,一定要熟练撑握什么是开音节,什么是闭音节,否则你就不撑握这些发音规律。1、ea

    2022年8月5日
    5
  • postman发送json数据请求(java用post发json数据)

    java发送post请求。在开发中我们经常遇到从一个服务器中向另外一个服务器的发送数据数据,他们走的基本上都是api,对于一般的增加、修改、删除都是post请求。下面的例子就是java使用HttpCilent发送一个post请求,参数形式是json格式。具体代码见[url]http://www.exceptionhelp.com/javadetail?articleId=582[/u…

    2022年4月14日
    37
  • 运行疑难解答时出错0x8000FFFF_win10无法继续执行代码

    运行疑难解答时出错0x8000FFFF_win10无法继续执行代码使用的编译器为VS2017.在调试所选测试的时候,出现如题报错。解决办法:将对应测试项目中的Properties文件夹中的lunchSettings.json文件删除,再进行调试,即可运行。转载于:https://www.cnblogs.com/hooyeefam/p/10109234.html…

    2022年9月2日
    2

发表回复

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

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