Object.wait

Object 中的 wait() 与 notify() 方法有什么用? wait()方法和notify()方法是用于线程间的通信和同步的方法。由于线程之间是抢占式执行的,因此线程之间执行的先后顺序难以预知。但是有时候我们希望合理的协调多个线程之间的执行顺序。这时候就需要用到 Object 中的 wait()方法和notify()方法了。 阅读详情

Object.wait

功能:挂起当前线程并释放锁

用途:用于多线程开发,主要用于条件队列编程。

用法:线程获取object锁后,调用object.wait,该线程被系统挂起,并释放锁。通过调用object.notify或者object.notifyAll可以唤醒该线程(调用notify或者notifyAll之前必须获得object锁)

唤醒:1,notify notifyAll

            2,Thread.interrupt()

            3,等待时间超时


一个线程也可以在不通知、不中断、不超时、不所谓的“虚假的唤醒”的情况下醒来。虽然在实践中很少出现这种情况,但应用程序必须通过测试导致线程被唤醒的条件,并在条件不满足的情况下继续等待。换句话说,等待应该总是出现在循环中,就像这样:


synchronized (obj) {
           while (<condition does not hold>)
                  obj.wait(timeout);
              ... // Perform action appropriate to condition
}


wait(0)=wait()   线程被一直挂起,直到被唤醒


Thread.join()就是利用Object.wait实现的

    public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }

注意事项:

1,threadA调用threadB.join(),join中调用的wait不是让threadB挂起,而是让threadA挂起。

2,threadB结束的时候应该调用了notify或notifyAll(虽然Thread代码中没有找到),要不wait(0)会将threadA一直挂起。


JDK1.7 API文档的带参数的join方法的注释如下:

This implementation uses a loop of this.wait calls conditioned on this.isAlive. As a thread terminates the this.notifyAll method is invoked. It is recommended that applications not use wait, notify, or notifyAll on Thread instances.

这说明了thread结束的时候会调用notifyAll,虽然没有显式调用。

而且推荐不要在thread实例上调用wait,notify或者notifyAll


无线自组织网络基础知识 参考书籍:《无线自组织网络路由协议及应用》 目录第一章 绪论1.1 无线自组织网络概述1.1.1 无线自组织网络的定义及分类1.1.2无线自组织网络的主要特点1.1.3无线自组织网络的应用与发展1.无线自组织网络的应用2.无线自组织网络的起源和发展1.2典型的无线自组织网络1.2.1移动Ad Hoc网络1、移动Ad Hoc网络的定义2.移动AdHoc网络的特点3.移动Ad Hoc网络的应用1.2.... 阅读详情

相关推荐

全志T113s3主线linux开发(0)--基础准备

嵌入式Linux设备的启动大概是三步:1)启动芯片+内存:常见的是Uboot,不过全志的Uboot主线对SPI NAND 不太友好,用TF卡就方便。对于T113S芯片,推荐使用Awboot,简陋但快速。开发阶段用这个就方便好多,对SPINAND支持也方便。2)启动linux内核:主线内核以下通篇都用6.13以上的内核。对比tina5.0还在用5.4 ,主要是性能、安全上有变化。6.0以上内核在devicetree的编写具体格式上有了变化,网上大量tina5.0和5.4内核的编写方式不适用。

2301_79234138的博客 2246

Object类九大方法之wait方法

Object类九大方法之wait方法 wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。 wait();//方式1: this.wait();//方式2: super.wait();//方式3 void notifyAll() 解除所有那些在该...

TimeFriends 6563

Redash离线环境部署2020.1(centos+windows)

背景 Redash是一款开源的BI系统,核心功能是添加数据源,然后进行数据的可视化展示。一般会拿出来同Supervisor和Metabase进行选型比较,这里对三者的选型不做细致分析。而是给出在Redash开发环境部署踩过的坑,很多坑是自己琢磨出来的,网上几乎找不到更新的资料。适用于没怎么用过linux,也不怎么熟悉python的,用的是最新(master)的redash的代码(上一个发布版本...

Jone_wan的专栏 2136

java JUC 中 Object里wait()、notify() 实现原理及实战讲解

在多核环境下,多个线程有可能同时执行monitorenter指令,并获取lock对象关联的monitor,但只有一个线程可以和monitor建立关联,这个线程执行到wait方法时,wait方法会将当前线程放入wait set,使其进行等待直到被唤醒,并放弃lock对象上的所有同步声明,意味着该线程释放了锁,其他线程可以重新执行加锁操作,notify方法会选择wait set中任意一个线程进行唤醒,notifyAll方法会唤醒monitor的wait set中所有线程。4、最终底层的park方法会挂起线程。

LoveSummer 5万+

ROS学习【11】-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真(camera、kinect、Lidar),并通过Rviz进行数据显示

ROS学习-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真目录一、Gazebo环境搭建前的准备1、将搭建模型下载到我们的gazebo环境下2、升级我们的gazebo版本二、创建配置launch文件参数的world文件1、进入工程包mbot_gazebo2、创建文件夹worlds3、进入该文件夹4、创建playground.world文件5、创建room.world文件三...

qq_42451251的博客 3606

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7449

13. 大佬问我: notify()会立刻释放锁么?

大佬问我: notify()会立刻释放锁么? ​ 我的内心戏: 肯定会啊! 这么简单的问题? 聪明如我, 决定装小白, 回答: 不会? 大佬: 很好, 小伙子基础不错! 我: 大佬: 说说为什么 我: ……………… 于是, 有了这篇文章! 问题的根本原来在于 “立刻”这个描述词! 如果你和咸鱼君一样懵逼, 不妨往下看! 技术大佬可以告辞了!! 接下来, 我们深入的分析分析wait和notify 前言 前面介绍了Synchronized关键词的原理与优

CTO技术的博客 1504

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1807

【线程】Object.wait 内部原理(二)

Object.wait 内部原理,剖析到JVM的C++源码。由浅到深

Sword52888的博客 1958

静态编译Qt5源码(Kylin-Desktop-V10-SP1-2203-LoongArch64+qt5.15.16)

之前的文档,记录的是通用情况,本次笔者记录下Qt5的静态编译过程,供有需要的小伙伴参考使用的操作系统是Kylin-Desktop-V10-SP1-General-Release-2203-LoongArch64,处理器是龙芯3A5000,架构是loongarch。

aggs1990的专栏 1401

【PSINS工具箱】159联邦滤波器代码优化与注释、运行结果、文字性解释。15维状态量、9维观测量,联邦滤波与集中式滤波对比。完整代码可订阅后查看

基于工具箱的联邦滤波代码,15维状态量、9为观测量

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 485

LockSupport和Object中wait/notify的异同点

先说结论 共同点 LockSupport和Object中的wait、notify、notifyAll方法都可以使线程进入WAIT或者TIMED_WAIT状态,它们具体表现在: 1、

APlus 1108

OpenClaw 从新手到中级完整教程【完整 持续更新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3113

java wait 参数_Java Object wait()方法

Java Object wait()方法java.lang.Object.wait(long timeout, int nanos)导致当前线程等待,直到其他线程调用此对象的 notify() 方法或notifyAll()方法,或在指定已经过去的时间。此方法类似于wait方法的一个参数,但它允许更好地控制的时间等待一个通知放弃之前的量。实时量,以毫微秒计算,计算公式如下:1000000*time...

weixin_35087326的博客 1350

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Object类的wait和notify详解

前言 前面介绍了Synchronized关键词的原理与优化分析,Synchronized的重要不言而喻, 而作为配合Synchronized使用的另外两个关键字也显得格外重要. 今天, 来聊聊配合Object基类的 wait() notify() 这两个方法的实现,为多线程协作提供了保证。 wait() & notify() Object 类中的 wait&notify 这两个方法,其实包括他们的重载方法一共有 5 个,而 Object 类中一共才 12 个方法,

只为成功找方法 不为失败找借口 2872

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Object的wait()和Condition的await()比较

Object的wait()和Condition的await() 1、Object的wait() Object类: 1)源码: public final void wait() throws InterruptedException { wait(0); } 2)解释: Object的wait方法,是当前线程调用synchronized后获取到了对象的锁之后才可以使用 调用wait()让当前线程进入一个waitSet(可以理解为有一个休息室),这样其他等待同一个对象锁的线程

雨落未成曲的博客 2453

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java Object.wait()方法

文章转自:http://www.yiibai.com/javalang/object_wait.html 描述 java.lang.Object.wait()这个对象使当前线程等待,直到其他线程调用notify()方法或notifyAll()方法。换句话说,这种方法的行为完全一样,如果简单地执行的调用wait(0). 当前线程必须拥有该对象的监视器。线程释放这个监视器的所有权并等

a1259109679的专栏 4477

Java的Object.wait(long)

Java的Object.wait(long)在等待时间过去后会继续往后执行吗 Object.wait(long)方法相比于wait,多了个等待时长,那么当等待时长过去后,线程会继续往下执行吗? 单个线程执行 多个线程并发执行 public class ThreadWaitDemo { public static final int WAIT_IN_SECONDS = 2; public static final int NOTIFY_IN_SECONDS = 6; public static v

longlovefilm的博客 865

Java Object的wait和notify方法

Java Object的wait和notify方法需要知道的一些事情

26857259 866

你真的懂object.wait和 wait(long timeout)的区别吗

并发编程小知识 object.wait 和 object.wait(long timeout) 通常的理解 相同点: 都会在拥有锁的时候立即释放锁,线程会被系统挂起,失去cpu时间片,得不到调度。 不同点: 后者线程会在指定timeout的时间过去之后被唤醒 真的清楚了吗? Q: 后者是在timeout的时间之后从wait立即返回吗 A: 答案是NO, timeout时间只是线程被阻塞的时间,过了...

gleethu的专栏 2613

java object wait_Java之Object类中wait带参方法和notify方法

各位小伙伴们大家好,在之前的文章中,小编简单介绍了等待唤醒的一些简单的案例,这次小编要简单提一下Object类中wait带参方法和notify。一个是wait(long timeout),在其他线程调用此对象的notify()方法或者notifyAll方法,或者超过指定的时间量前,导致当前线程等待。一个是notifyAll()唤醒在此对象监视器上等待的所有线程。进入到TimedWaiting有两种...

weixin_32191051的博客 277

为什么 wait 方法定义在 Object 类里面,而不是 Thread 类?

本文深入剖析了Java中wait()、notify()、notifyAll()方法定义在Object类而非Thread类的原因。从对象监视器机制、JVM实现原理、操作系统条件变量等多个维度分析,指出这些方法与对象锁紧密绑定,操作的是对象内部的等待队列。相比Thread.sleep()仅控制线程本身,wait()需要释放特定对象锁并等待唤醒,这种设计更符合面向对象原则,避免了API冗余和语义混淆。通过对比POSIX线程库和Java并发演进,论证了将锁和条件变量合并到Object中的合理性,体现了Java并发模

油墨香^-^的博客 906

为什么Wait和notify方法在Object中?

** 为什么Wait和notify方法在Object类中** 为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中? 以下观点我认为是有道理的: wait 和 notify 不仅仅是普通方法或同步工具,更重要的是它们是 Java 中两个线程之间的通信机制。 对语言设计者而言, 如果不能通过 Java 关键字(例如 synchronized)实现通信此机制,同时又要确保这个机制对每个对象可用, 那么 Object 类则是的合理的声明位置。 记

southwindpass的博客 4093

Java 的 Object 的 wait0 的底层原理

特性描述方法名作用使线程进入等待状态,释放锁,直到被唤醒或超时依赖机制JVM 的和操作系统的线程阻塞机制(如 futex)调用限制必须在 synchronized 块内调用异常处理抛出典型用途多线程协作、生产者-消费者模型、任务调度等场景理解wait0()的底层实现有助于你更深入地掌握 Java 并发编程的核心机制。这些文件详细描述了 Monitor 的工作原理以及线程调度的底层实现。

Java的专栏 1001

Object 的Wait Notify NotifyAll 源码解析

object notify 没有唤醒线程的功能,那到底是谁唤醒的呢?

Prior_SX的博客 684

Object.wait()

package JUC; /** * Causes the current thread to wait until either another thread invokes the * {@link java.lang.Object#notify()} method or the * {@link java.lang.Object#notifyAll()} method for t

Dajianganya的专栏 535
上一篇: 奇特的java类
下一篇: Thread tips
wk022
博客等级 码龄17年 39粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值