Java模拟:一家三口共享银行账户的wait-notify机制
50 浏览量
更新于2024-08-29
收藏 35KB PDF 举报
该代码示例是一个简单的Java多线程模拟,模拟了一个家庭中的三个人(丈夫、妻子和儿子)共享同一银行账户的情况。当账户余额不足时,丈夫会被通知去存款;当余额充足时,妻子和儿子可以进行消费。这个程序主要用来练习Java中的`wait()`和`notify()`方法,这两个方法是Java并发编程中实现线程间通信的关键工具。
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Object类的方法,用于在多线程环境下控制线程的执行顺序和同步。在这个例子中,`Account` 类有一个布尔变量 `boo` 来标记账户余额是否充足,以及一个 `synchronized` 方法 `deposit()` 用于存款。`synchronized` 关键字确保在同一时刻只有一个线程可以访问该方法,避免了并发访问时的数据不一致问题。
`deposit()` 方法首先检查登录信息,然后判断账户余额是否充足。如果账户余额充足(`boo == true`),则调用 `this.wait()` 让当前线程(即丈夫线程)进入等待状态,释放锁,让其他线程有机会执行。当余额不足时,丈夫线程会向账户中充值并更新余额。
`wait()` 方法会使当前线程暂停执行并释放它持有的锁,直到另一个线程调用相同对象的 `notify()` 或 `notifyAll()` 方法唤醒它。在本例中,妻子和儿子线程在消费时可能需要调用 `notify()` 来唤醒等待的丈夫线程,让他们知道需要充值。
妻子和儿子的消费操作(未在提供的代码片段中显示)可能包含类似的逻辑,即检查账户余额是否充足,如果不足,则调用 `account.wait()` 让线程等待,同时丈夫线程在充值后调用 `account.notify()` 或 `account.notifyAll()` 唤醒等待的线程。`notifyAll()` 会唤醒所有等待该对象的线程,而 `notify()` 只会唤醒一个。
这个简单的模拟展示了如何使用 `wait()` 和 `notify()` 实现线程间的同步和通信,以及如何处理多线程环境中的条件变量。然而,实际应用中可能需要更复杂的同步机制,如使用 `java.util.concurrent` 包中的工具,如 `ReentrantLock`, `Condition` 等,以提供更好的控制和可读性。
2015-05-03 上传
2014-01-03 上传
2012-04-08 上传
点击了解资源详情
2023-07-08 上传
2023-03-16 上传
2023-03-16 上传
weixin_38517105
- 粉丝: 3
- 资源: 922
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍