java 多线程中虚假唤醒

虚假唤醒是多线程编程中的一种现象,当多个线程等待同一条件,条件满足时所有线程被唤醒,但可能只有一个线程能正确执行。这种由于线程执行顺序导致的条件不满足但仍继续执行的情况被称为虚假唤醒,涉及线程同步和锁机制。
摘要由CSDN通过智能技术生成

虚假唤醒详解

接触过多线程编程的朋友们或多或少都听说过虚假唤醒这一术语,我在百度,B 站上看了很多讲解,都没说的太清楚,在这里写一下,尽量规范一下相关概念。

虚假唤醒是什么

首先我们来谈谈虚假唤醒到底是什么。在这里我给出一个自己的定义,用来理解虚假唤醒。

虚假唤醒是一种现象,它只会出现在多线程环境中,指的是在多线程环境下,多个线程等待在同一个条件上,等到条件满足时,所有等待的线程都被唤醒,但由于多个线程执行的顺序不同,后面竞争到锁的线程在获得时间片时条件已经不再满足,线程应该继续睡眠但是却继续往下运行的一种现象。

上面是比较书面化的定义,我们用人能听懂的话来介绍一下虚假唤醒。
多线程环境的编程中,我们经常遇到让多个线程等待在一个条件上,等到这个条件成立的时候我们再去唤醒这些线程,让它们接着往下执行代码的场景。假如某一时刻条件成立,所有的线程都被唤醒了,然后去竞争锁,因为同一时刻只会有一个线程能拿到锁,其他的线程都会阻塞到锁上无法往下执行,等到成功争抢到锁的线程消费完条件,释放了锁,后面的线程继续运行,拿到锁时这个条件很可能已经不满足了,这个时候线程应该继续在这个条件上阻塞下去,而不应该继续执行,如果继续执行了,就说发生了虚假唤醒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值