wait、sleep、interrupt、notify

泛微ecology9 HRMwebservice接口实战:企业组织架构与人员信息同步指南 本文详细介绍了泛微ecology9 HRMwebservice接口在企业系统集成中的实战应用,重点解析了如何通过该接口实现组织架构与人员信息的双向同步。内容涵盖环境配置、核心接口调用、数据格式规范及常见错误排查,旨在帮助开发与运维工程师高效完成主数据同步,提升企业IT管理效率。 阅读详情

Wait

导致当前的线程等待,直到其他线程调用此对象的 notify方法或 notifyAll 方法。

当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。

Sleep

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。

Wait与Sleep。。。

Wait是Object类的方法,范围是使该Object实例所处的线程。

Sleep()是Thread类专属的静态方法,针对一个特定的线程。

一般情况下在线程中若只是想暂停就可以不用wait,只要用Thread.sleep(...)这个方法,就像睡觉会睡过点一样,sleep的线程在时间结束后也不一定能够立即恢复执行。

//线程A中
try...{
System.out.println("A will sleep");
this.sleep();
}catch(InterruptedException e)...{
//A已经被中断了
System.out.println("A was interrupted");
}

//其他线程中
A.interrupt();
如果使用Wait方法需要通过Lock进行互斥,不然会抛出java.lang.IllegalMonitorStateException异常。

private Object lock = new Object();
...
synchronized (getLock()) ......{
getLock().wait(timeout);
}
...
protected Object getLock() ......{
return lock;
}
...
public void broadcast() ...{
synchronized (getLock()) ...{
getLock().notifyAll();
}
}
上述实现了在一个Thread中使用wait等待的方法,由一个Fine-grain 锁来控制线程的互斥。

Wait方法使实体所处线程暂停执行,从而使对象进入等待状态,直到被notify方法通知或者wait的等待的时间到。Sleep方法使持有的线程暂停运行,从而使线程进入休眠状态,直到用interrupt方法来打断他的休眠或者sleep的休眠的时间到。

Wait方法进入等待状态时会释放同步锁(如上例中的lock对象),而Sleep方法不会释放同步锁。所以,当一个线程无限Sleep时又没有任何人去interrupt它的时候,程序就产生大麻烦了。

亲密。。。与notify。。。与interrupt。。。

wait与notify。。。

notify是用来通知线程,但在notify之前线程是需要获得lock的。另个意思就是必须写在synchronized(lockobj) {...}之中。wait也是这个样子,一个线程需要释放某个lock,也是在其获得lock情况下才能够释放,所以wait也需要放在synchronized(lockobj) {...}之中。看下下面的例子:

//在线程A中
synchronized(lockobject) ...{
  while(!condition) ...{
    lockobject.wait();
  }
  //TODO 该运行的部分
}
  
//在线程B中
synchronized(lockobject) ...{
  condition = true;
  lockobject.notify();
}

A线程获得lock之后不断的判断条件,不满足的时候就释放lock,进入等待。B获得lock,并且改变条件,之后通知A,之后B离开lock区,A获得lock执行该运行的部分。

Sleep与notify。。。

我感觉他们凑在一起没有任何的意义,因为线程在Sleep时并不会释放他占有的lock,所以notify并不能唤醒他。

Sleep与interrupt。。。

interrupt是个很暴力的方法,打断一个线程的Sleep时并不需要获得该线程的lock。虽然暴力却也有暴力的用处。在一个线程无时限sleep的时候也只有interrupt能够唤醒他。在interrupt的时候会抛出InterruptedException,这个Exception是由Thread 类自动抛出的。因此Interrupt带有强烈的阻塞味道。

wait与interrupt。。。

interrupt同样可以打断wait的等待,与打断sleep不同的是,被打断的wait的线程在重新获得lock之前是不会抛出InterruptedException。

遗忘。。。resume与suspend。。。

resume和suspend已经被Java遗弃,因为他们天生会引起线程的死锁。

suspend是个贪婪的家伙,当一个线程在suspend的时候,线程会停下来,但却仍然持有在这之前获得的锁定。其他线程无法使用他锁定的任何资源,除非这个挂起的线程被resume之后,他才会继续运行。对于线程的同步,使用wait与notify要安全的多。

k8s中pod使用详解 k8s中Pod使用 阅读详情

相关推荐

Fluent 中多相流模型全面解析

3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。

khhdp的博客 3085

Wait与Sleep

<br />Wait<br />导致当前的线程等待,直到其他线程调用此对象的 notify方法或 notifyAll 方法。<br />当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。<br />Sleep<br />在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。<br />Wait与S

rikgong的专栏 2741

用ESP32-S3打造迷你录音笔:SPIFFS存储+INMP441麦克风全流程解析

本文详细解析了如何使用ESP32-S3微控制器与INMP441数字麦克风构建迷你录音笔。内容涵盖硬件选型、I2S驱动配置、SPIFFS文件系统存储管理以及WAV格式封装等全流程,重点探讨了在资源受限的嵌入式设备上实现高质量语音采集与存储的优化方案和实战技巧。

qq_27496129的博客 1365

wait、notify、sleep、interrupt对比分析

方法简述 Thread类 sleep:暂停当前正在执行的线程;(类方法) yield:放弃当前CPU资源,让其他任务去占用CPU执行时间,放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。(类方法) join:等待该线程终止; interrupt:仅仅是在当前线程上做一个停止的标记,并不会真正的停止线程,与interrupted()静态方法或isInterrupted()实例方法配合使用,达到中断线程的目的。当线程调用wait(),sleep(),join()或I/O操作时,将收到Inte

Littlemotor 1040

单目和多目视觉统一标定

单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在

吴建明wujianming_110117 2911

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 359

sleep()、wait()、notify()、notifyAll、线程五种状态之间的关系

sleep()、wait()、notify()、notifyAll、线程五种状态之间的关系

supuerlovepc的博客 965

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

线程中wait()、sleep()、notify()、yield()、join的使用

wait():线程进入等待状态直到notify唤醒或者notifyAll唤醒。 sleep():线程进入睡眠,该线程暂停。 notify():唤醒wait队列中的第一个线程,与此对应的notifyAll唤醒wait队列中的所有线程。 yield():线程会让出资源,但是并不会让出锁,若果是加锁的代码块,会在该线程完全结束后其他线程才能访问。 join():线程插队,在线程1中执行Threa...

qq_32256003的博客 812

中断向量表配置不当引发Default_Handler死循环问题解析

本文深入解析STM32开发中因中断向量表配置不当导致的Default_Handler死循环问题。以STM32F407VET6为例,详细阐述中断向量表的工作原理、常见触发场景及系统化排查方法,并提供使用STM32CubeMX的正确姿势和手动配置的注意事项,帮助开发者快速定位并解决这一常见难题。

grafana6viz的博客 178

微信小程序 - 强力解决wx.getLocation定位不准的问题,如何修正微信小程序wx.getLocation获取用户位置信息不准确解决办法(高精度定位还是不够精准,定位不准有偏差,彻底消除误差)

如何解决getLocation定位偏差的问题?微信小程序API—wx.getLocation定位不准的问题,微信小程序wx.getLocation获取用户位置信息不准确解决办法,解决微信小程序wx.getLocation定位不准的问题,定位不准确,实际位置偏差大,相差几公里,微信小程序wx.getLocation获取用户位置信息不准确解决办法,关于微信小程序获取准确定位的方法及解决定位不准确的问题,偏差太多好几百米,wx.getLocation 返回定位精度不准问题,如何消除这个误差,开启高精度定位依旧有误

🏆 前端领域优质创作者 1万+

java之sleep, wait, notify, notifyall

Sleep sleep语义:放弃CPU资源,并告诉操作系统未来N时间内不参与CPU资源竞争。由于是竞争,所以超过N时间,也可能仍竞争不到。sleep不释放资源锁:如果持有锁,则sleep时仍然持有。sleep可以被中断唤醒。sleep(0)语义:告诉系统重新进行一次CPU资源竞争,自己仍可能抢占到CPU资源。缺点是频繁执行会耗费大量CPU时间,优点是适当使用可以提高系统总体响应性能。

vincentff7zg的专栏 695

PCL RANSAC拟合分割圆柱体模型【2026最新版】

使用RANSAC拟合分割圆柱的原理介绍、官网示例代码实现以及一个可视化拟合出来的圆柱的具体应用案例。博客长期更新,最近一次更新时间为:2026年1月28日。

点云侠的博客 40万+

深入剖析Sleep、wait、notify、notifyAll、yield、join、Interrupt

sleep原理sleep是Thread类中的静态方法,首先看下sleep的源码/** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subject to * the pre

路漫漫,水迢迢 2002

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

wait-notify-sleep-interrupt-join方法的一些理解

几个方法都是用来做线程管理的。几个关键点: 定义的地方不同,几个方法定义在不同的类里面 wait-notify定义在Obejct类里面, sleep-interrupt-join定义在Thread类里面 wait方法会释放monitor,需要用nofity/notifyAll来唤醒重新获取monitor;sleep方法不会释放monitor join方法是等待当前进程结束,利用wait方法来实现的,主线程A等待子线程B完成(主线程A通过调用子线程B的join()方法来实现) interr

chadm.xiang 265

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java的sleep,wait,join,yield,notify以及interrupt

1.sleep是Thread的静态方法,参数为线程睡眠的时间,线程此时不会让出监视器资源,在睡眠时间内不参与CPU调度,时间到了之后处于就绪状态,参与CPU调度。期间如果调用线程的interrupt方法会抛出异常。 2.wait方法是Object类的方法,会释放线程的监视器资源,因此调用前必须先获取某个监视器资源。期间如果调用线程的interrupt方法会抛出异常。也可以传入一个等待时间参数wait(timeout),如果一个线程调用共享对象的该方法挂起后,没有在指定的 (timeout)ms 内被其他线程

weixin_45614626的博客 499

java中sleep、interrupt、wait、notify、join、yield用法

1)interrupt是Thread对象的方法,用于修改线程的打断状态为true(可以用isInterrupted()来获取),除此之外未做任何其他事,所以interrupt并不会去真正的打断某个线程的运行状态或杀死某个线程; 但是,当本线程在sleep阻塞或者wait阻塞或者join阻塞(本质还会wait阻塞)时,如果被interrupt,那么会在sleep或wait或join方法内抛出异常InterruptedException(可理解为本线程正在阻塞,没办法设置interrupt的状态,所以抛出异.

ArtisticProgramming的博客 640

Java线程interrupt、wait-notify/all、sleep等方法(源码级分析)

也就是WAIT/TIME WAIT本质上是用一个Object中的等待队列去存储需要等待的线程对象,每一个Object对象都可以充当这个角色,获取这个对象的waitset才能把Thread放入,唤醒相当于再从这个waitset中把线程剔除来再唤醒,这也就是为什么wait notify/all 方法需要synchronized同一个对象了。它清除中断标志是为了避免开发者不小心忽略异常后,线程还带着一个“脏标志”继续运行,导致逻辑混乱,真是贴心的很。由于迭代器用的还是DequeueWaiter,所以这个仍然是。

weixin_53132064的博客 818

线程的sleep,wait notify notifyAll,interrupt synchronized你清楚吗?

以前对于知识,总是习惯有一个模糊的概念,认为只要会用,脑海中知道个大概就可以了,但是却很少系统的深入理解。这不,面试被虐的体无完肤,所以,对于知识,一定要不求甚解 。 ...

大漠孤狼的博客 394

wait、notify、join、yield、sleep、interrupt的介绍

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34249678的博客 140

Java线程相关函数:sleep(),wait(),notify(),notifyAll(),yield(),interrupt(),join(),

我们先放一张图: 相信看完这篇文章之后你能很容易看懂这张图 1,线程睡眠sleep():让当前线程进入阻塞状态,不会释放锁 属于Thread类的静态方法,需要使用try-catch捕获异常 static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程睡眠(暂停执行)。 static void sleep(long millis, int ...

ailaojie的博客 796

wait,notify,sleep,yield,join,interrupt,isInterrupted 方法总结

java 多线程相关方法总结(wait,notify,sleep,yield,join,interrupt,isInterrupted ,synchronized 代码块和方法)java 中 object 对象的隐藏属性——monitor 和 wait set.java中 任何一个对象 都有以上两个涉及到 多线程并发 方面的隐藏属性。监视器 和 等待队列。  有些方法执行时,需要拥有对象的锁。...

iteye_4926的博客 186

java多线程(2) wait notify notifyall sleep stop interrupt join

多线程的wait notify notifyall sleep stop interrupt join wait notify wait notify 都是object根类上的方法(貌似现在不太常用) wait调用之前 wait方法调用之前要先获得该对象的监视器锁,否则会报IllegalMonitorStateException异常 获得监视器锁的方式主要有 Synchronized(Objec...

weixin_45832718的博客 270

sleep,interrupt和wait,notify的区别

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级。 (b)正在运行的线程因为其它原因而阻塞。   wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间

xwygn的专栏 5275

Java多线程sleep(),join(),interrupt(),wait(),notify()

关于Java多线程知识可以看看《Thinking in Java 》中的多线程部分和《Java网络编程》中第5章多线程的部分 以下是参考&lt;&lt;Java多线程模式&gt;&gt;的 1. sleep() &amp; interrupt()     线程A正在使用sleep()暂停着: Thread.sleep(100000);     如果要取消他的等待状态,可以在正在执行的...

lkf0217的专栏 122
上一篇: sleep和wait的区别
下一篇: 装饰设计模式
wangpanbaoding
博客等级 码龄18年 42粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值