Java线程基础(三):线程调度以及wait/notify

wait/notify调度线程执行顺序 想必我们都知道线程的执行的顺序是抢占式执行,有时候我们需要线程执行的顺序按照一定的要求执行,也就是说有没有一种方法可以控制线程的执行顺序呢~ 阅读详情

time-sliceing & yield

(placeholder)


wait/notify

Java中Object类实现了两个方法:wait以及notify,这样所有的java对象都含有了这两个方法。

调用wait或者notify的时候,当前线程必须要是对象lock的拥有者,否则会抛出IllegalMonitorStateException异常。(为什么???)

             share.wait();  //IllegalMonitorStateException

正确的写法:

            synchronized (share) {
                share.wait();
            }


当线程在synchronized中调用了share.wait()时,在放弃了CPU的同时,也放弃了share这个对象的lock,进入这个对象的wait pool。

当另外一个线程调用了share.notify()时,将从wait pool中拿出一个线程,让该线程获得lock,并继续执行。

这也就是为什么wait/notify需要加锁的原因。


为什么wait/notify需要加锁

http://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block

这个链接中的解释是很好的


其他:

noitfyall,虽然可以唤醒所有线程,但是每个线程单独执行的时候,仍然是需要获取lock的。


参考资料:

http://www.javaworld.com/article/2071214/java-concurrency/java-101--understanding-java-threads--part-3--thread-scheduling-and-wait-notify.html

http://www.rapidprogramming.com/tutorial/JAVA-The-wait-notify-Mechanism-in-java-133

http://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block

大麦网抢票软件工具开发系列(一) 前言《大麦网》都知道吧,就是那个被网友声称“大麦网你卖啥了?”票务平台。近期有听到朋友说《大麦网》的票很难抢,基本上都是说:“哎哟喂,被挤爆啦,请稍后重试!”,也不知道《大麦网》... 阅读详情

相关推荐

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 304

【多线程】wait 和 notify

合理的协调多个线程之间的执行先后顺序.

HuTool的博客 987

迈创cameralink采集卡安装操作说明

迈创cameralink采集卡安装操作说明MIL软件安装MIL软件下载获取MIL软件安装MIL软件安装常见问题 MIL软件安装 MIL软件下载获取 MIL软件安装 解压MIL安装包,点击MilSetup.exe开始安装,如下图所示; 备注:64位系统MIL软件可以同时安装32位和64位客户端,本文档默认安装64位客户端,64位系统安装32位MIL方法后续再展开讲(不建议这样用,很麻烦) 点击Launch Installation开始安装,64位系统,默认只安装64位MIL客户端 根据采集卡驱动,选择M

qq_23107577的博客 9346

java多线程总结一(wait和notify的线程调度)

线程和对象锁,休眠和唤醒

yiranbaby的博客 472

数据库decimal类型详解:精度、标度与金额计算避坑指南

在关系型数据库中,浮点数精度丢失是常见问题,尤其涉及金额计算时,一分钱误差都可能导致对账失败。decimal类型通过十进制存储方式,将小数当作定点数处理,避免了二进制转换误差,确保运算结果精确。其核心在于精度和标度的合理定义,以及运算舍入规则的控制。在电商订单、汇率转换、税务计算等场景中,decimal是保障数据准确性的关键技术。理解其存储原理和实操细节,能有效规避隐式转换、聚合函数精度等常见坑点,提升系统可靠性。

weixin_32050773的博客 270

从菜鸟到高手:我的Abaqus壳单元S4R、S3R、S8R选择心路历程

第一次打开Abaqus的单元库时,我被琳琅满目的壳单元类型晃花了眼。S4R、S3R、S8R、STRI65、S9R5...这些看似随意的字母数字组合,背后却隐藏着影响仿真精度的关键密码。作为一名从土木工程转行到汽车结构仿真的工程师,我花了三年时间才真正理解如何根据问题特性精准选择壳单元。这段学习历程充满试错与顿悟,今天就用几个关键案例,分享我的壳单元选择方法论。

weixin_42525637的博客 417

C#LeetCode刷题-分治算法

分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30.9% 困难 23 合并K个排序链表 39.4% 困难 53 ...

比特飞 1万+

20个闭环渗透测试项目:从漏洞发现到简历突围

渗透测试不仅是工具使用,更是对系统设计缺陷与实现偏差的深度推演。理解OWASP Top 10、Burp Suite等基础能力只是起点,真正具备工程价值的是能复现、可验证、可协作的完整攻击链。本文聚焦真实业务场景下的SSRF协议绕过、JWT签名机制缺陷、Redis未授权利用、Kong网关配置风险及etcd存储结构分析等核心热词,揭示漏洞本质在于架构决策与配置偏差的叠加态。适用于红队实战、甲方安全建设与乙方渗透审计等多类岗位,帮助从业者将技术动作升维为技术叙事。

weixin_32234493的博客 413

Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

原博地址 一、线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。 New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。 Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU...

今天的BUG保熟。 212

安卓 实现灯光闪过效果

有个小需求,给按钮加一个灯光划过的效果,这样的需求一般有UI,肯定就找UI了要个gif图不就完事了,可是这次没有,好久自己做一个嘛。Web端的大佬实现很快,到安卓这边呢,百度一搜发现诶?怎么没有,好吧自己来一个 一切动效相关的不给图看都是耍流氓 所以俺不能这么干啊,OK!直接上效果图,再来解释下怎么实现的 效果就是这样子,怎么实现呢? 从图分析下,就是一个光写着重左边移动要右边循环嘛,这有啥难的?? 来看一看我的第一版,第二版 这是个什么?????一点都不像啊? 赶紧再问了问Web端大佬,噢,加了一个

SummerCloudXT的博客 1378

《ATF(TF-A)专题精讲》目录——146篇,完整覆盖整个ATF的官方文档

本文摘要介绍了Trusted Firmware-A (TF-A)项目的技术文档体系。主要内容包括:项目概述、组件解析(如ARM RAS/RME/CCA等安全技术)、系统设计(启动流程、中断管理、信任链等)、开发指南(构建环境、移植策略)、性能分析、平台支持(涵盖NXP、Marvell、Xilinx等主流芯片厂商)、开发流程规范以及安全通告(CVE漏洞分析)。文档体系全面覆盖了ARM安全固件的技术实现、硬件适配和开发实践,为开发者提供了从理论到实践的完整参考。

Linux内核架构师 1112

Java多线程-wait/notify机制

文章目录等待/通知(wait/notify)机制一 等待/通知机制介绍1.1 不使用等待/通知机制1.2 什么是等待/通知机制?1.3 等待/通知机制的相关方法二 等待/通知机制的实现2.1 我的第一个等待/通知机制程序2.2 线程的基本状态2.3 notify()锁不释放2.4 当interrupt方法遇到wait方法 等待/通知(wait/notify)机制 一 等待/通知机制介绍 1.1 不...

qq_24095055的博客 1203

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java多线程基础-7:wait() 和 notify() 用法解析

详解Java多线程编程中,wait()和notify()方法的使用方式和注意事项,配合代码案例~

wyd_333的博客 8413

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【JavaSE】【多线程】volatile,wait/notify

volatile处理内存可见性问题 wait / notify调控线程调度

yj20040627的博客 3507

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

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

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

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

VIBE的博客 4248

【JavaEE初阶 — 多线程】wait() & notify()

wait() & notify()

OuO-1 的博客 1812

【Java多线程编程】wait与notify方法详解

本期讲解:Java 多线程中的 wait方法、notify方法、notifyAll方法,wait方法与sleep方法之间的区别。

我的主页 4493

wait 和 notify

wait 和 notify 简介以及使用方式,举例内部实现,以及面试时会出现的wait和sleep的区别

bit me的博客 1994

Java多线程中的 wait() 和 notify() 方法

多线程并发的场景下,有时需要某些线程先执行,这些线程执行结束后其他线程再继续执行, wait()和notify()是Object类的方法,用于线程的等待与唤醒,必须搭配synchronized 锁来使用。

sinat_31583645的博客 4350

Java并发编程01:Java多线程基础(synchronized,volatile,wait/notify)

多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础多线程基础 ...

ncepu_Chen的博客 2738

【Java多线程】wait方法和notify方法

介绍wait方法和notify方法

chaodddddd的博客 1426

多线程之——wait和notify

本文主要介绍了Java多线程中的线程饥饿问题以及wait/notify机制。线程饥饿是由于synchronized默认采用非公平锁,可能导致某些线程长时间无法获取锁。文章详细讲解了wait()、notify()和notifyAll()方法的使用规则:必须搭配synchronized使用,且操作对象必须一致;wait()要在循环中调用以避免虚假唤醒。通过ABC顺序打印的示例,展示了如何利用这些方法实现线程间的协调控制。最后强调了wait()必须在notify()之前调用才有效,否则无法唤醒等待线程。

2301_79204376的博客 1199

Java【多线程】wait和notify

由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知.但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序.

zrwcnm的博客 982

【Java|多线程与高并发】wait和notify方法详解

在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法wait和notify方法用于实现线程间的协作和通信.wait方法使线程进入等待状态,notify方法唤醒一个等待线程,notifyAll方法唤醒所有等待线程。通过上述三个方法,可以使线程按照特定的顺序执行或者等待某个条件满足后再执行。希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!

云泽野の编程日记 1776

线程-wait-notify

1. 创建⼀个新线程的代价要⽐创建⼀个新进程⼩得多2. 与进程之间的切换相⽐,线程之间的切换需要操作系统做的⼯作要少很多3. 线程占⽤的资源要⽐进程少很多4. 能充分利⽤多处理器的可并⾏数量5. 在等待慢速I/O操作结束的同时,程序可执⾏其他的计算任务6. 计算密集型应⽤,为了能在多处理器系统上运⾏,将计算分解到多个线程中实现7. I/O密集型应⽤,为了提⾼性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

m0_64308748的博客 954

线程调度与单例模式:wait、notify与懒汉模式解析

引入 wait notify 就是为了能够从应用层面,干预到多个不同线程代码的执行顺序,可以让后执行的线程主动放弃被调度的机会,等先执行的线程完成后通知放弃调度的线程重新执行。

2402_87239469的博客 1598
上一篇: Java线程基础(二):Synchronization
下一篇: Java线程基础(四):ThreadGroup、Volatility
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值