java-wait和notify的用法.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前,我们先来详细解释这两个方法的工作原理。 `wait()`方法的作用是使当前持有对象锁的线程暂停执行,进入等待池,释放对象锁,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法来唤醒它。当线程被唤醒后,它并不会立即恢复执行,而是需要再次竞争对象锁,才能重新进入同步代码块或方法。这使得其他线程有机会执行同步代码。 `notify()`方法则是用来唤醒在指定对象上等待的一个线程。当调用`notify()`时,会随机选择一个在该对象上等待的线程并将其从等待池移到可运行队列。需要注意的是,唤醒的线程并不立即执行,而是需要等到当前持有锁的线程完成同步代码并释放锁后,才能获得锁并继续执行。 现在,让我们分析给定的程序: ```java class ThreadA { public static void main(String[] args) { ThreadB b = new ThreadB(); b.start(); System.out.println("b is start...."); synchronized (b) { // 括号里的 b 指定了同步的对象,确保线程安全 try { System.out.println("Waiting for b to complete..."); b.wait(); // 主线程调用wait,释放锁并等待 System.out.println("Completed.Now back to main thread"); } catch (InterruptedException e) {} } System.out.println("Total is :" + b.total); } } class ThreadB extends Thread { int total; public void run() { synchronized (this) { // 线程B同步在自身对象上,确保线程安全 System.out.println("ThreadB is running.."); for (int i = 0; i < 100; i++) { total += i; System.out.println("total is " + total); } notify(); // 线程B完成计算后唤醒等待的线程 } } } ``` 在这个例子中,`ThreadA`是主线程,它创建并启动`ThreadB`。`ThreadB`是一个自定义的线程类,负责累加一个整数`total`。在`ThreadA`中,主线程通过`synchronized (b)`获取了`ThreadB`对象的锁,然后调用`b.wait()`,使得主线程进入等待状态,释放锁。`ThreadB`在`run()`方法中执行累加操作,同步在`this`(即`ThreadB`对象)上,确保累加过程是线程安全的。当`ThreadB`完成计算后,它调用`notify()`唤醒等待的线程,此时主线程由于被唤醒,重新获取锁并继续执行。 总结一下,`wait()`和`notify()`是Java多线程编程中实现线程间同步和通信的关键工具。`wait()`让线程暂停并释放锁,等待其他线程的通知;`notify()`则用来唤醒一个在对象上等待的线程。在实际编程中,需要正确地使用这些方法,确保线程安全和程序的正确性。理解这两个方法的工作原理以及如何在同步代码块中恰当使用,对于编写高效的并发程序至关重要。
- 粉丝: 3
- 资源: 11万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G SRM815模组原理框图.jpg
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3