Java解惑 - sleep和wait/notify机制, 线程阻塞和等待的区别

线程生命周期状态转换 线程生命周期转换 sleep() 和yield()区别 阅读详情

sleep()方法

sleep()方法是定义在Thread上的native方法, 在设定时间段内(精度取决于CPU)阻塞线程的执行, 但是并不更改线程的锁持有情况.

wait/notify机制

wait()方法是定义在Object上的方法, 是java语言级的方法, 需要在同步块或者同步方法中进行调用, 会释放锁, 并进入锁对象的等待队列, 需要等到其他线程调用notify()方法释放锁后(实际上该线程同步块运行结束后才会释放锁), 重新竞争锁.

总结

两者的共同点是

  • 都暂时停止线程的执行, 线程本身不会占用CPU时间片.
  • 区别是调用了sleep方法的线程直接受CPU调度, 而wait则是等待另外的java线程在持有同一个对象锁的同步块/方法中进行notify调用.

线程阻塞和等待的区别

实际上不用可以区分两者, 因为两者都会暂停线程的执行. 两者的区别是: 进入waiting状态是线程主动的, 而进入blocked状态是被动的. 更进一步的说, 进入blocked状态是在同步(synchronized代码之外), 而进入waiting状态是在同步代码之内.

注: 以上文字引用自优快云 YidingHe的回答

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了 废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server) 阅读详情

相关推荐

微信本地数据解密实战:从AES加密原理到EnMicroMsg.db恢复指南

数据加密是保障信息安全的核心技术,其中对称加密算法AES因其高效可靠,被广泛应用于各类本地数据保护场景。其原理是通过特定密钥对数据进行混淆转换,确保未经授权者无法读取原始内容。在移动应用领域,本地数据库加密对于保护用户隐私、防止数据泄露具有重要价值。微信作为国民级应用,对其本地存储的聊天记录数据库(EnMicroMsg.db)采用了基于设备标识和用户UIN生成的AES-256-CBC加密方案。理解这一机制,不仅有助于在合法合规前提下进行个人数据备份与恢复,也为开发者进行客户端安全分析、兼容工具开发提供了基础

weixin_30764883的博客 571

Java中线程等待和线程阻塞的区别?

Java中线程等待和线程阻塞的区别?

水煮大鸡蛋的博客 5186

新手必看!华为S5700交换机健康检查清单:从CPU到日志的完整巡检流程

本文为新手网管人员提供华为S5700交换机的健康检查完整指南,涵盖CPU、内存、温度、日志等核心指标的日常维护流程。通过详细的display命令和实用案例,帮助用户快速掌握设备体检技巧,确保交换机稳定运行。

weixin_29251337的博客 237

面试题:阻塞和等待有啥区别?

面试题

qq_34590676的博客 1075

AutoCAD二次开发(.Net)之XData

对于CAD中的实体进行筛选等操作,常常会用到实体的XData属性,下面介绍一下实体的XData的增删改。 //XData的新增,修改跟新增一样,new一个ResultBuffer,赋值即可 Document doc=Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = doc.LockDocument()) { using (Transaction trans = doc.TransactionManager.S.

qq_21489689的博客 2594

数字频率计设计中的常见误区:从VHDL代码到硬件实现的避坑指南

本文深入探讨了数字频率计从VHDL代码到FPGA硬件实现过程中的关键误区与解决方案。重点分析了闸门时间生成的精度与资源平衡、控制时序设计中的竞争冒险规避,以及如何利用EDA工具进行综合、时序约束与调试,确保设计稳定可靠。文章为开发者提供了从仿真成功到硬件可用的实战避坑指南。

spark7igniter的博客 213

线程转换状态,傻傻分不清等待和阻塞吗?你还在暴力的停止线程吗?

线程创建之后,调用start()方法开始运行。当线程执行wait()方法之后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超时时间到达时将会返回到运行状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程在执行Runnable的run()方法之后将会进入到终止状态。Java将操作系统中的运行和就绪两个状态合并称为运行状态。阻塞状态是线程。

qq_52988841的博客 3130

内模控制(IMC)——理论、应用与实践

内模控制方法的核心思想是利用被控对象的数学模型(即内模)构建控制器,使得控制器可以“预知”被控系统的动态响应,从而在控制输入中提前补偿模型的固有特性和扰动影响。常见的内模控制结构中,将系统分为无延迟部分和扰动部分,并利用内部模型预测输出值,再通过反馈回路进行误差修正。utuimctufbtutui​mctuf​bt其中,uimctu_imc(t)ui​mct为内模预测得到的预补偿控制量,ufbtu_fb(t)uf​bt。

闲人编程的博客 2634

Java中阻塞与等待的区别?

阻塞是指线程由于外部条件(如等待 I/O 操作、获取资源等)无法继续执行,线程会被挂起,直到外部条件满足。等待是指线程主动进入等待状态,通常是因为它在等待其他线程的通知或某个条件的变化。这两个概念的关键区别在于谁控制线程的暂停:阻塞通常是由外部事件(如 I/O 操作)控制的,而等待是由线程自身决定并等待其他线程的唤醒。

qq_44062110的博客 816

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

ChenJin_2的博客 276

车载以太网测试-3【Wireshark介绍】

数据包捕获支持从多种网络接口(如以太网、Wi-Fi、蓝牙等)捕获数据包。可以实时捕获或从文件中读取已捕获的数据包。协议解析支持解析数百种网络协议(如 TCP/IP、HTTP、DNS、FTP 等)。能够深入解析协议头部和负载,帮助用户理解网络通信的细节。过滤功能提供强大的显示过滤器和捕获过滤器,帮助用户快速定位和分析感兴趣的数据包。支持基于协议、IP地址、端口号等多种条件的过滤。统计和分析提供多种统计工具,如流量图、会话统计、协议分层统计等。

车载网络测试工程师的博客 1992

java-线程状态-阻塞和等待-bloked-和-waiting-区别

定义解释 阻塞:当一个线程试图获取一个内部的对象锁(非java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。 等待:当一个线程等待另一个线程通知调度器一个条件时,该线程进入等待状态。例如调用:Object.wait()、Thread.join()以及等待Lock或Condition。 可以通过代码与JConsole来验证 验证阻塞 public stati...

huanchankuang3257的博客 3216

RAG系统中Reranker模型选型实战

本文详细介绍了RAG系统中Reranker模型选型实战,希望能对学习RAG的同学们有所帮助。 文章目录 1. 前言 2. 思路解析 3. 测评数据集构建 3.1 步骤一 3.2 步骤二 3.3 数据示例 3.4 总结 4. 实战代码 4.1 本地模型 4.2 使用第三方的Reranker模型API

herosunly的博客 17万+

wait_notify park_unpark

obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得 Object 对象的锁,才能调用这几个方法log.debug("执行....");// 让线程在obj上一直等待下去。

qq_40314469的博客 637

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java等待_彻底搞懂Java的等待-通知(wait-notify)机制

更多内容,欢迎关注微信公众号:全菜工程师小辉~线程的生命周期转换线程的生命周期新建状态(New):新建一个线程对象。就绪/可运行状态(Runnable):线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。运行状态(Running):就绪状态的线程获得CPU并执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放...

weixin_39769228的博客 269

efm32 入门.pdf

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

第二篇文章:线程的状态(生命周期) 五种状态和六种状态

这是因为一个线程一次在cpu上运行很短的时间(比如10~20ms,此时线程处于running状态),然后就要被切换下来放到调度队列的队尾(此时线程处于ready状态),由于线程在这两种状态之间切换的很快,所以区分这两种状态没什么意义。注意其中waiting状态和Time_Waiting状态之间的区别是waiting状态是一直。(2)除了有阻塞态,新加了新的状态:等待状态。等待状态,该线程等待的是其他线程通知或者中断。创建(初始),就绪,运行,阻塞,死亡。阻塞状态,该线程等待的是其他线程释放锁。

weixin_47414034的博客 667

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

线程的阻塞 sleep() wait() yield()[转]

<br />转自:http://blog.youkuaiyun.com/peijunlin/archive/2008/12/20/3564559.aspx<br />为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。<br /><br />      阻塞指的是暂停一个线程的执行以等

GeneralXCK的专栏 572

聊聊Java线程:从“一个人干所有活”到“团队协作”

本文深入讲解了Java线程的核心概念与应用,重点包括: 线程创建方式:继承Thread类、实现Runnable接口、Callable+FutureTask组合,分析各自适用场景和返回值处理差异。 线程协作机制: join()实现主线程等待、sleep()定时暂停但保持锁、yield()礼貌让出CPU、wait()/notify()基于条件等待的线程通信、线程中断原理: interrupt()作为信号机制的本质、处理sleep中断时标记被清除的陷阱、两阶段终止模式的实现关键、线程状态转换、守护线程特性

留白Blank的博客 551

java多线程总结

1 、创建多线程的方式有几种 第一种是继承Thread 方式 第二种是实现了Runnable接口的方式 第三种 是实现Callable接口的方式 2 三种的优缺点是什么 对于Thread的方式 它的有点是简单易操作 但是它缺点就是单继承 对于实现的Runnable 接口,它放好解决了Thread的缺点并且能够实现多个接口。但是它不能拿到线程的返回值 Callable接口太复杂 3 线程的状态 1 (new)初始状态 2 (runnable)运行状态 3 (blocked)阻塞状态.

qq_38345598的博客 385

【Java】关于线程类的一些常见问题

在一个线程中直接调用另一个线程的run()方法只是进行普通的方法调用,并不会启动线程。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。1、java中有几种方法可以实现一个线程?...

X_xiaojuzi的博客 222

彻底搞懂Java的等待-通知(wait-notify)机制

线程的生命周期转换 新建状态(New):新建一个线程对象。 就绪/可运行状态(Runnable):线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 运行状态(Running):就绪状态的线程获得CPU并执行程序代码。 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用...

全菜工程师小辉的博客 1万+

Java多线程wait()和notify()方法图解

多线程场景下 wait 和notify 方法详解,注意事项,内部阻塞队列和等待队列的过程,wait和sleep方法的区别

VIBE的博客 4250

【多线程初阶】wait 和 notify(线程的等待通知机制)

本节⽬标• 掌握 wait 和 notify(线程的等待通知机制)

2402_85428625的博客 2982
上一篇: Java并发编程 - volatile, synchronize关键字实现原理
下一篇: Java并发编程 - 常用容器(ConcurrentHashMap, ConcurrentLinkedQueue)
congyh
博客等级 码龄15年 43粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值