当前位置: 首页 > news >正文

Java重修笔记 第五十七天 坦克大战(七)多线程基础 - 编程练习

 1. 线程之间的协调控制(通知方式)
public class Homework04 {public static void main(String[] args) {// 在 main 方法中启动两个线程// 第一个线程内循环打印 1 到 100 以内的整数// 直到第二个线程从键盘读取到 "Q" 指令后结束第一个线程的运行A01 a01 = new A01();a01.start();B01 b01 = new B01(a01);b01.start();}
}// 创建 A 线程类, 循环打印 1 到 100 以内的整数
class A01 extends Thread {private boolean loop = true;@Overridepublic void run() {while (loop) {System.out.println((int) (Math.random() * 100 + 1));try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程 A 退出... ");}public void setLoop(boolean loop) {this.loop = loop;}
}// 创建 B 线程类, 从键盘读取到 "Q" 指令
class B01 extends Thread {A01 A; // 将线程 A 当做属性, 线程 B 才能用通知的方式来操作线程 Aprivate Scanner scanner = new Scanner(System.in);public B01(A01 a) {A = a;}@Overridepublic void run() {while (true) {// 接收用户的输入System.out.println("输入 Q 退出循环: ");char key = scanner.next().toUpperCase().charAt(0);if (key == 'Q') {// 以通知的方式结束线程 AA.setLoop(false);System.out.println("线程 B 退出... ");break;}}}
}

运行结果:

2. 线程同步
public class Homework05 {public static void main(String[] args) {A02 a021 = new A02();new Thread(a021).start();new Thread(a021).start();}
}class A02 implements Runnable {private int money = 10000;public void setMoney(int money) {this.money = money;}public int getMoney() {return money;}@Overridepublic void run() {// 取钱synchronized (this) {while (true) {if (money <= 0) {System.out.println("钱取完了, " + Thread.currentThread().getName() + "线程结束...");break;}setMoney(getMoney() - 1000);System.out.println(Thread.currentThread().getName() + "取了1000, 剩余:" + getMoney());}}}
}

运行结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Sitecore 定时任务使用介绍
  • udp聊天室
  • 深度学习的关键数据结构——张量解释
  • 【ArcGIS】栅格计算器原理及案例介绍
  • MS SQL Server 实战 排查多列之间的值是否重复
  • HTB-Lame(msf利用)
  • 数学建模笔记—— 多目标规划
  • Xcode报错:No exact matches in reference to static method ‘buildExpression‘
  • 微服务之间远程调用实现思路
  • MySQL练手题--体育馆的人流量(困难)
  • PyCharm安装
  • Jacoco的XML报告详解
  • Uniapp + Vue3 + Vite +Uview + Pinia 实现购物车功能(最新附源码保姆级)
  • Flask 第八课 -- 模板渲染
  • ArrayList 源码解析
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • bearychat的java client
  • Computed property XXX was assigned to but it has no setter
  • input的行数自动增减
  • Linux各目录及每个目录的详细介绍
  • Lsb图片隐写
  • MySQL-事务管理(基础)
  • PaddlePaddle-GitHub的正确打开姿势
  • Shadow DOM 内部构造及如何构建独立组件
  • uva 10370 Above Average
  • 从伪并行的 Python 多线程说起
  • 记一次删除Git记录中的大文件的过程
  • 免费小说阅读小程序
  • 悄悄地说一个bug
  • 数组的操作
  • - 转 Ext2.0 form使用实例
  • 自制字幕遮挡器
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​马来语翻译中文去哪比较好?
  • ###C语言程序设计-----C语言学习(3)#
  • #include<初见C语言之指针(5)>
  • #Z0458. 树的中心2
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (MATLAB)第五章-矩阵运算
  • (poj1.2.1)1970(筛选法模拟)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)PySpark3:SparkSQL编程
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十三)MipMap
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Linux整合apache和tomcat构建Web服务器
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 直连SAP HANA数据库
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET程序员迈向卓越的必由之路
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET框架
  • .NET微信公众号开发-2.0创建自定义菜单
  • @Autowired 和 @Resource 区别的补充说明与示例