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

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

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

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 – 如果在获取锁时,当前线程被中断(并且支持对锁获取的中断)。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python fast api_python django框架

    python fast api_python django框架Tensorflow已经有了Keras,PyTorch当然也得出一个对标的高阶封装库,于是Fastai应运而生。由于目标市场比较低端,Fastai在某种程度上舍弃了定制化,更追求开箱即用。个人感觉会成为神经网络界的sklearn吧。…

  • EfficientNet网络详解[通俗易懂]

    EfficientNet网络详解[通俗易懂]目录前言论文思想网络详细结构MBConv结构EfficientNet(B0-B7)参数前言原论文名称:EfficientNet:RethinkingModelScalingforConvolutionalNeuralNetworks论文下载地址:https://arxiv.org/abs/1905.11946原论文提供代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet自己使用Pyt

  • Linux 修改用户密码「建议收藏」

    Linux 修改用户密码「建议收藏」Linux修改密码用passwd命令,用root用户运行passwd,passwduser_name可以设置或修改任何用户的密码,普通用户运行passwd只能修改它自己的密码。[root@localhost~]#passwd##修改root用户密码Changingpasswordforuserroot..Newpassword:##输入新密码Retypene…

  • Linux抓包命令tcpdump「建议收藏」

    Linux抓包命令tcpdump「建议收藏」tcpdump是一个抓包工具,用于抓取互联网上传输的数据包tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具tcpdump支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息#常用选项-i#监听哪一个网卡-n #不把ip解析成主机名-nn #不把端口解析成应用层协议-c #指定抓包的数量-S #不把随机序

  • setScale,preScale和postScale的区别

    setScale,preScale和postScale的区别下面是Matrix3*3的矩阵结构[java] viewplaincopy1.   {MSCALE_X,MSKEW_X,MTRANS_X,  2.   MSKEW_Y,MSCALE_Y,MTRANS_Y,  3.   MPERSP_0,MPERSP_1,MPERSP_2}  一、首先介绍Scale缩放的控制scale就是缩放,我们调用Matrix的setSc

    2022年10月20日
  • 深度学习基础知识整理「建议收藏」

    深度学习基础知识整理「建议收藏」本文是在七月的BAT机器学习面试1000题系列进行修改。 前言  July我又回来了。  之前本博客整理过数千道微软等公司的面试题,侧重数据结构、算法、海量数据处理,详见:微软面试100题系列,今17年,近期和团队整理BAT机器学习面试1000题系列,侧重机器学习、深度学习。我们将通过这个系列索引绝大部分机器学习和深度学习的笔试面试题、知识点,它将更是一个足够庞大的机器学习和深…

发表回复

您的电子邮箱地址不会被公开。

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