模拟案例

案例:存在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多线程(二、吃苹果案例)相关推荐

  1. JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))

    本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...

  2. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  3. 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库

    1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以.    发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载.     2.jahmm是java开发隐马尔科夫模型的一个j ...

  4. iOS面试题(二十五)多线程 --NSOperation和NSOperationQueueNSThread锁机制

    7.多线程 GCD(使用最多) NSOperation/NSOperationQueue(AFNetworking源码中所有网络请求任务都封装到NSOperation,提交到operationQueu ...

  5. Scratch(二十五):猫吃老鼠

    哈喽,大家好.今天给大家展示的Scratch小游戏是猫吃老鼠,下面我们一起看一下效果吧. Scratch小游戏之猫吃老鼠 1.素材的获取 懒得找素材直接 滴滴,如下图所示. 2.'小猫的设置 当&qu ...

  6. C#基础概念二十五问 【二】 [转]

    11.可以使用抽象函数重写基类中的虚函数吗? 答: 可以 需使用 new 修饰符显式声明,表示隐藏了基类中该函数的实现 或增加 override 修饰符,表示抽象重写了基类中该函数的实现 示例: cl ...

  7. ArcGIS实验教程——实验二十五:大型商场选址经典案例

    ArcGIS实验视频教程合集:<ArcGIS实验教程从入门到精通>(附配套实验数据) 一.实验分析 合理的商场位置有利于商家营业,方便人们购物.商场选址问题需要考虑很多因素,如地理位置.居 ...

  8. 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>

    打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...

  9. 刘东明微信营销二十五式初探(一)

    中国电子商协会PCEM网络整合营销研究中心主任 刘东明 北京航空航天大学研究生 杨晓燕 李怀林 高骏杰 微信火了,意料之中!从2011年1月21日第一版本发布,如今微信用户即将突破4亿大关. 放眼中国 ...

  10. java常见面试考点(二十五):CAS是什么

    java常见面试考点 往期文章推荐:   java常见面试考点(二十):Elasticsearch 和 solr 的区别   java常见面试考点(二十一):单点登录   java常见面试考点(二十二 ...

最新文章

  1. 在Homebrew 发布程序
  2. 静态路由与动态路由的优先级_静态路由基础知识
  3. activity中指定一页面动态设置软键盘弹出属性
  4. 6-4 单链表插入排序 (15分)
  5. u盘解密软件_【精彩文章】基于STM32的指纹识别U盘设计
  6. C# Winform代码片段-大二下学期的垃圾代码
  7. 苹果回应iPhone邮件漏洞;GitHub连续3天爆严重宕机情况;腾讯开源Transformer推理加速工具| 极客头条...
  8. servlet的四种响应
  9. Linux系统命令 - 查看内存使用情况
  10. 压缩包密码,办公文档密码破解实例讲解!
  11. 电脑登录微信,手机退出微信,电脑端微信仍然在线(IOS)
  12. u盘1kb快捷方式病毒修复_修复“无法为2097152KB对象堆保留足够的空间” JFrog Artifactory启动错误...
  13. ChatGPT+Midjourney实现儿童绘本故事及其插图(数字1~10的故事)
  14. {“msg“:“参数错误“,“code“:400}:问题
  15. 蓝牙BQB认证所需资料和流程
  16. windows7环境下theano安装
  17. 直线检测——Radon变换/霍夫变换/基于快速傅里叶变换的直线检测
  18. 微信小程序主体如何变更?小程序迁移流程详解
  19. 走进“开源SDR实验室” 一起玩转GNU Radio:gr-channels
  20. 在windows系统上如何将iphone备份到移动硬盘

热门文章

  1. Window服务初级教程以及log4net配置文件初始化
  2. Server Application Error(IIS)
  3. workbench拓扑优化教程_ANSYS经典案例在Workbench中实现 | 基于网格重划分的金属成型仿真分析...
  4. java lombok ppt,Lombok详解
  5. java条件运算符类型转换_Java数据类型、运算符及类型转换
  6. Python批处理文件
  7. java 三维全景_三维全景虚拟现实技术具有三大特点
  8. windows下利用pybind11生成pyd库
  9. python实现原始字典数据中键值互换得到新的字典数据
  10. c语言 和 运算顺序,二 如何学习C语言的运算符和运算顺序