二十五、JAVA多线程(二、吃苹果案例)
模拟案例
案例:存在50个苹果,现在有请三个童鞋(小A,小B,小C)上台表演吃苹果。因为A,B,C三个人可以同时吃苹果,此时得使用多线程技术来实现这个案例。
----------------------------------------------------------------------------------------------
分析: 可以定义三个线程对象,并启动线程.每一个同学吃苹果的时候: 先展示自己拿到手上苹果的编号,如1,2,3,... 再吃掉苹果(意味着苹果的总数少一个)
----------------------------------------------------------------------------------------------
方式1:可以使用继承Thread方式来实现
代码演示:
package eatapple;class People extends Thread{//设置苹果的总数为50private int num = 50;public People(String name){super(name);}@Overridepublic void run() {for (int i = 0; i < 50; i++) {if(num>0){System.out.println(super.getName()+"吃了编号为"+num+"的苹果");num--;}}}}
public class ThreadDemo {public static void main(String[] args) {new People("dodo").start();new People("haha").start();new People("lili").start();}
}
代码讲解:我们运行输出,使用继承方式完成该案例的时候我们发现,会出现三个同学都吃了50个苹果,这显然是不合理的,原因如下图
方式2:可以使用实现Runnable方式来实现
代码演示:
package eatapple;class Apple implements Runnable{private int num = 50;@Overridepublic void run() {for (int i = 0; i < 50; i++) {if(num > 0){System.out.println(Thread.currentThread().getName()+"吃了编号为"+num+"的苹果");num--;}}}}
public class RunnableDemo {public static void main(String[] args) {Apple apple = new Apple();new Thread(apple,"dodo").start();new Thread(apple,"haha").start();new Thread(apple,"lili").start();}
}
代码讲解:static Thread currentThread()返回当前正在执行的线程对象的引用,String name = Thread.currentThread().getName();在使用实现的方式的时候,这时候我们会发现三个同学一共吃了50个苹果,因为三个线程共享了一个Apple对象,而一个Apple对象中有50个苹果数量。
分析继承方式和实现方式的区别:
-------------------------------------------------------------------------------------
继承方式:
1):Java中类是单继承的,如果继承了Thread了,该类就不能再有其他的直接父类了.
2):从操作上分析,继承方式更简单,获取线程名字也简单.(操作上,更简单)
3):从多线程共享同一个资源上分析,继承方式不能做到.
实现方式:
1):Java中类可以多实现接口,此时该类还可以继承其他类,并且还可以实现其他接口(设计上,更优雅).
2):从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用.
3):从多线程共享同一个资源上分析,实现方式可以做到(是否共享同一个资源),在这里三个同学完成抢苹果的例子的使用实现方式才合理。
二十五、JAVA多线程(二、吃苹果案例)相关推荐
- JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))
本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库
1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以. 发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载. 2.jahmm是java开发隐马尔科夫模型的一个j ...
- iOS面试题(二十五)多线程 --NSOperation和NSOperationQueueNSThread锁机制
7.多线程 GCD(使用最多) NSOperation/NSOperationQueue(AFNetworking源码中所有网络请求任务都封装到NSOperation,提交到operationQueu ...
- Scratch(二十五):猫吃老鼠
哈喽,大家好.今天给大家展示的Scratch小游戏是猫吃老鼠,下面我们一起看一下效果吧. Scratch小游戏之猫吃老鼠 1.素材的获取 懒得找素材直接 滴滴,如下图所示. 2.'小猫的设置 当&qu ...
- C#基础概念二十五问 【二】 [转]
11.可以使用抽象函数重写基类中的虚函数吗? 答: 可以 需使用 new 修饰符显式声明,表示隐藏了基类中该函数的实现 或增加 override 修饰符,表示抽象重写了基类中该函数的实现 示例: cl ...
- ArcGIS实验教程——实验二十五:大型商场选址经典案例
ArcGIS实验视频教程合集:<ArcGIS实验教程从入门到精通>(附配套实验数据) 一.实验分析 合理的商场位置有利于商家营业,方便人们购物.商场选址问题需要考虑很多因素,如地理位置.居 ...
- 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>
打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...
- 刘东明微信营销二十五式初探(一)
中国电子商协会PCEM网络整合营销研究中心主任 刘东明 北京航空航天大学研究生 杨晓燕 李怀林 高骏杰 微信火了,意料之中!从2011年1月21日第一版本发布,如今微信用户即将突破4亿大关. 放眼中国 ...
- java常见面试考点(二十五):CAS是什么
java常见面试考点 往期文章推荐: java常见面试考点(二十):Elasticsearch 和 solr 的区别 java常见面试考点(二十一):单点登录 java常见面试考点(二十二 ...
最新文章
- 在Homebrew 发布程序
- 静态路由与动态路由的优先级_静态路由基础知识
- activity中指定一页面动态设置软键盘弹出属性
- 6-4 单链表插入排序 (15分)
- u盘解密软件_【精彩文章】基于STM32的指纹识别U盘设计
- C# Winform代码片段-大二下学期的垃圾代码
- 苹果回应iPhone邮件漏洞;GitHub连续3天爆严重宕机情况;腾讯开源Transformer推理加速工具| 极客头条...
- servlet的四种响应
- Linux系统命令 - 查看内存使用情况
- 压缩包密码,办公文档密码破解实例讲解!
- 电脑登录微信,手机退出微信,电脑端微信仍然在线(IOS)
- u盘1kb快捷方式病毒修复_修复“无法为2097152KB对象堆保留足够的空间” JFrog Artifactory启动错误...
- ChatGPT+Midjourney实现儿童绘本故事及其插图(数字1~10的故事)
- {“msg“:“参数错误“,“code“:400}:问题
- 蓝牙BQB认证所需资料和流程
- windows7环境下theano安装
- 直线检测——Radon变换/霍夫变换/基于快速傅里叶变换的直线检测
- 微信小程序主体如何变更?小程序迁移流程详解
- 走进“开源SDR实验室” 一起玩转GNU Radio:gr-channels
- 在windows系统上如何将iphone备份到移动硬盘
热门文章
- Window服务初级教程以及log4net配置文件初始化
- Server Application Error(IIS)
- workbench拓扑优化教程_ANSYS经典案例在Workbench中实现 | 基于网格重划分的金属成型仿真分析...
- java lombok ppt,Lombok详解
- java条件运算符类型转换_Java数据类型、运算符及类型转换
- Python批处理文件
- java 三维全景_三维全景虚拟现实技术具有三大特点
- windows下利用pybind11生成pyd库
- python实现原始字典数据中键值互换得到新的字典数据
- c语言 和 运算顺序,二 如何学习C语言的运算符和运算顺序