首页 > 编程语言 >Java基础 当某一个线程执行代码时发现锁已经被锁住了,该线程会怎么样?

Java基础 当某一个线程执行代码时发现锁已经被锁住了,该线程会怎么样?

时间:2023-10-28 13:22:55浏览次数:27  
标签:尝试 Java 当某 阻塞 锁住 线程 等待

当一个线程尝试获取一个已经被其他线程锁住的锁时,它的行为取决于所使用的编程语言和锁的类型。一般情况下,有以下几种可能的行为:

1.阻塞等待:线程会被阻塞,直到锁变为可用。这是最常见的情况,通常用于互斥锁。在Java中,可以使用synchronized关键字或ReentrantLock类来实现这种行为。
2.非阻塞尝试:线程尝试获取锁,但如果锁已经被其他线程占用,它会立即返回而不会被阻塞。这可以用于实现一些非阻塞算法,或者在某些情况下,线程可以继续执行其他任务而不必等待锁。Java中的tryLock方法就是一个例子。
3.超时等待:线程尝试获取锁,但如果锁在一定时间内仍然不可用,它会放弃等待并继续执行其他操作。这种情况下,通常会设置一个超时时间。Java中的tryLock(long timeout, TimeUnit unit)方法可以实现这一行为。
4.自旋等待:线程尝试获取锁,但不会被阻塞,而是会在一个循环中反复尝试。这被称为自旋等待,用于减少线程切换的开销。如果锁一直不可用,线程可能会浪费CPU时间。自旋等待通常用于一些低级的线程同步操作,如CAS(Compare-And-Swap)操作。

总之,线程在尝试获取已被其他线程锁住的锁时,其具体行为取决于编程语言和锁的实现方式。不同的情况可能需要选择不同的等待策略,以便在多线程环境中实现正确的同步和互斥。

 

标签:尝试,Java,当某,阻塞,锁住,线程,等待
From: https://www.cnblogs.com/gagaya2/p/17794002.html

相关文章

  • java——redis随笔——实战——优惠券秒杀
    黑马视频地址:https://www.bilibili.com/video/BV1cr4y1671t?p=49&spm_id_from=pageDriver&vd_source=79bbd5b76bfd74c2ef1501653cee29d6 csdn地址:https://blog.csdn.net/weixin_50523986/article/details/131815165          stringRedisTemplate.......
  • 5款在线JavaScript加密混淆工具
    5款常用、好用的在线JavaScript加密混淆工具,网址请从截图中查看。1、jscrambler2、JShaman3、javascriptobfuscator4、freejsobfuscator5、jjencode......
  • Java中的Set集合
    Set集合的特点:不能存储相同元素。Set接口两大实现(常用):HashSetTreeSetSet是一个抽象接口,不能对Set进行实例化。(Setset=newSet();)错误该接口主要继承于Collection接口,所以具有Collection的一些常见的方法。1.add()向集合中添加元素,返回Boolean2.clear()  ......
  • 你知道Java21中的顺序集合吗?
    在Java21中,处理集合的方式得到了改进,因为三个新的接口已经融入了现有的类型层次结构。这些顺序集合为我们提供了一个统一的API来访问第一个和最后一个元素,并以相反的顺序处理集合。为了更好地理解顺序集合是什么,让我们回顾一下集合之前的样子。Java集合框架在Java1.2中引入的C......
  • javaweb--多表查询
    多表查询:从多张表中查询数据内连接:相当于查询A、B两张表的交集隐式连接:selectt1.name,t1.id,t2.dnamefromepmt1,deptt2whereepm.name=dept.id外连接:左外连接是查找A表所有数据和AB表的交集select*fromt1joint2ont1.id=t2.id左外连接是查找B表所有数据和AB表的......
  • Java反序列化之URLDNS链
    Java反序列化之URLDNS链一、漏洞简介URLDNS链是java原生态的一条利用链,通常用于存在反序列化漏洞进行验证的,因为是原生态,不存在什么版本限制。该链有以下三个特点:不限制jdk版本,使用Java内置类,对第三方依赖没有要求目标无回显,可以通过DNS请求来验证是否存在反序列化漏洞URLD......
  • JAVA-EE在不使用MVC分层的情况下用一个servlet完成转账业务------Java-Web项目
    在不使用MVC分层的情况下用一个servlet完成转账业务packagecom.bjpowernode.Bank.servlet;importcom.bjpowernode.Bank.exception.AppException;importcom.bjpowernode.Bank.exception.MoneyNotEnoughException;importcom.bjpowernode.oa.utils.DBUtil;importjakarta.ser......
  • Java 垃圾回收机制
    目录垃圾回收的基础知识堆空间的基本结构内存分配和回收原则对象优先在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代GC分类对象是否可被回收引用计数算法可达性分析算法引用类型强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomRefere......
  • Java 音频处理,音频流转音频文件,获取音频播放时长
    1.背景最近对接了一款智能手表,手环,可以应用与老人与儿童监控,环卫工人监控,农场畜牧业监控,宠物监控等,其中用到了音频传输,通过平台下发语音包,发送远程命令录制当前设备音频并将音频分包传输到服务器上生成音频文件等。其中关于音频的一些简单操作封装成了工具包。2.音频工具包引入jaud......
  • 你知道Java21中的顺序集合吗?
    大家好,我是老七,点个关注吧,将持续更新更多精彩内容!在Java21中,处理集合的方式得到了改进,因为三个新的接口已经融入了现有的类型层次结构。这些顺序集合为我们提供了一个统一的API来访问第一个和最后一个元素,并以相反的顺序处理集合。为了更好地理解顺序集合是什么,让我们回顾一下集合......