java trylock超时_java trylock以及可中断锁

java trylock超时_java trylock以及可中断锁线程在调用lock方法来获得另一个线程所持有的锁的时候,很可能发生阻塞。应该更加谨慎地申请锁。tryLock方法试图申请一个锁,在成功获得锁后返回true,否则,立即返回false,而且线程可以立即离开去做其他事。可以调用tryLock时,使用超时参数。lock方法不能被中断。如果一个线程在等待获得一个锁时被中断,中断线程在获得锁之前一直处于阻塞状态。如果出现死锁,那么,lock方法就无法终止。A…


Jetbrains全系列IDE稳定放心使用

线程在调用lock方法来获得另一个线程所持有的锁的时候,很可能发生阻塞。应该更加谨慎地申请锁。tryLock方法试图申请一个锁,在成功获得锁后返回true,否则,立即返回false,而且线程可以立即离开去做其他事。

可以调用tryLock时,使用超时参数。

lock方法不能被中断。如果一个线程在等待获得一个锁时被中断,中断线程在获得锁之前一直处于阻塞状态。如果出现死锁,那么,lock方法就无法终止。

API介绍:

Lock接口

1、tryLock

boolean tryLock()

仅在调用时锁为空闲状态才获取该锁。

如果锁可用,则获取锁,并立即返回值 true。如果锁不可用,则此方法将立即返回值 false。

此方法的典型使用语句如下:Lock lock = …;      if (lock.tryLock()) {          try {

// manipulate protected state

} finally {

lock.unlock();

}

} else {

// perform alternative actions

}12345678910

此用法可确保如果获取了锁,则会释放锁,如果未获取锁,则不会试图将其释放。

返回:

如果获取了锁,则返回 true;否则返回 false。

2、tryLock

boolean tryLock(long time,

TimeUnit unit)

throws InterruptedException

如果锁在给定的等待时间内空闲,并且当前线程未被中断,则获取锁。

如果锁可用,则此方法将立即返回值 true。如果锁不可用,出于线程调度目的,将禁用当前线程,并且在发生以下三种情况之一前,该线程将一直处于休眠状态:

锁由当前线程获得;或者

其他某个线程中断当前线程,并且支持对锁获取的中断;或者

已超过指定的等待时间

如果获得了锁,则返回值 true。

如果当前线程:

在进入此方法时已经设置了该线程的中断状态;或者

在获取锁时被中断,并且支持对锁获取的中断,

则将抛出 InterruptedException,并会清除当前线程的已中断状态。

如果超过了指定的等待时间,则将返回值 false。如果 time 小于等于 0,该方法将完全不等待。

实现注意事项

在某些实现中可能无法中断锁获取,即使可能,该操作的开销也很大。程序员应该知道可能会发生这种情况。在这种情况下,该实现应该对此进行记录。

相对于普通方法返回而言,实现可能更喜欢响应某个中断,或者报告出现超时情况。

Lock 实现可能可以检测锁的错误用法,例如,某个调用可能导致死锁,在特定的环境中可能抛出(未经检查的)异常。该 Lock 实现必须对环境和异常类型进行记录。

参数:

time – 等待锁的最长时间

unit – time 参数的时间单位

返回:

如果获得了锁,则返回 true;如果在获取锁前超过了等待时间,则返回 false

抛出:

InterruptedException – 如果在获取锁时,当前线程被中断(并且支持对锁获取的中断)

3、lockInterruptibly

void lockInterruptibly()

throws InterruptedException

如果当前线程未被中断,则获取锁。

如果锁可用,则获取锁,并立即返回。

如果锁不可用,出于线程调度目的,将禁用当前线程,并且在发生以下两种情况之一以前,该线程将一直处于休眠状态:

锁由当前线程获得;或者

其他某个线程中断当前线程,并且支持对锁获取的中断。

如果当前线程:

在进入此方法时已经设置了该线程的中断状态;或者

在获取锁时被中断,并且支持对锁获取的中断,

则将抛出 InterruptedException,并清除当前线程的已中断状态。

实现注意事项

在某些实现中可能无法中断锁获取,即使可能,该操作的开销也很大。程序员应该知道可能会发生这种情况。在这种情况下,该实现应该对此进行记录。

相对于普通方法返回而言,实现可能更喜欢响应某个中断。

Lock 实现可能可以检测锁的错误用法,例如,某个调用可能导致死锁,在特定的环境中可能抛出(未经检查的)异常。该 Lock 实现必须对环境和异常类型进行记录。

抛出:

InterruptedException – 如果在获取锁时,当前线程被中断(并且支持对锁获取的中断)。

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

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

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

相关推荐

  • 澳男星“雷神”发布健身App 好友与妻子齐助阵

    澳男星“雷神”发布健身App 好友与妻子齐助阵

    2021年6月29日
  • 设计模式—工厂方法

    设计模式—工厂方法

    2022年1月18日
  • Python究竟是什么?能干嘛?

    Python究竟是什么?能干嘛?#前言最近这段时间跟很多同学沟通以后发现很多人虽然来学习Python,大家只是抱着好奇的心来看看,对于编程,计算,Python这些没有一些基础的概念。思前想后,写下这篇博文,希望能够帮助到各位同学。

    2022年7月3日
  • c++ 实现键盘钩子

    c++ 实现键盘钩子一.总体概述  主要实现的是将windows活跃或是顶层窗口的键盘输入的记录下来储存在txt文件中。主要用到的知识windows操作系统的消息机制,动态库等一些知识二.具体的实现  首先我们要重新建立一个windows桌面应用程序,然后我们运行一下我们会看到一个窗口,我们创建桌面应用程序而不创建控制台程序是因为桌面应用程序,这里面最主要的原因控制应用程序模拟DOS系统的那种CUI操作,…

    2022年5月24日
  • 怎么将pdf转换成image_php从入门到精通 pdf

    怎么将pdf转换成image_php从入门到精通 pdf上次找到fpdf发现文档支持不足。而且含有php5.4不能用了的过期函数,图片进去也显示不了等问题。特意找到这个tcpdf。下载的地址搞一个试试中文字体包下载%20Sans%20Fallback%20-%20PHP.zip/download下载后,将它解压放在droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文…

    2022年9月6日
  • 全局莫兰指数_空间自相关 | 莫兰指数

    全局莫兰指数_空间自相关 | 莫兰指数空间自相关:是指一些变量在同一个分布区内的观测数据之间潜在的相互依赖性。其中,自相关中的“自”表示当你进行相关性观察统计量,是来源于不同对象的同一属性。Tobler(1970)曾指出“地理学第一定律:任何东西与别的东西之间都是相关的,但近处的东西比远处的东西相关性更强”。空间自相关统计量是用于度量地理数据(geographicdata)的一个基本性质:某位置上的数据与其他位置上的数据间…

    2022年6月25日

发表回复

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

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