以前你编写的Java程序同时能做几件事情?有几个执行流程?main方法执行完,整个程序一定会退出吗?
- 最多只能做一件事
- 函数按着顺序执行,函数内按着语句执行。可以有多个可以有一个。
- 不一定。因为Main方法执行完之后,也许有线程未关闭,所以JVM肯定不会退出。如果在main加入System.exit(0)则会强制退出。
早期的电脑一般是单核CPU,但那时我们就可以在编写程序的同时听歌,你觉得其CPU可以同时执行两个程序的指令吗?如果不能,为什么我们可以边写程序边听歌?
- 不可以。单核只能同时处理一个。
- 因为计算机虽然指令多,但是cpu运算速度更快,让我们觉得在同时运行两个程序,实际上两个程序指令是来回执行的。
打开“资源监视器”观察你使用的QQ、浏览器或者WPS,一般有几个线程?思考一下,当你运行这些程序的时候,有哪些现象证明了这些程序使用了多个线程?
这里以微软edge为例子
以我个人理解,出现多个程序的原因有以下
- 我安装的edge扩展
- 我打开的网页(可能每一个没有关闭的网页都是一个线程)
- edge的更新检测服务
- edge的账号服务(同步自己的浏览历史等)
比如我在浏览bilibili的时候,我首先使用油猴开启了免会员,其次再由adground帮我免除广告,点击视频,不仅有视频输出还有声音输出(举例bilibili是因为bilibili为了省劲现在用的是硬件加速,也就是说它是占用cpu资源的)。单是访问这个网站看视频就已经有五个线程了。
运行“Bounce”与”BounceThread”两个程序。当你多次点击Start时,两个程序运行起来有何不同?为什么?
- 直观上来看,BounceThread按一次start就会出现一个球,而Bounce只能出现一个球(上一个球停止运动start点击才有效)。
- BounceThread使用了多线程操作。(这点有待补充)
思考:两个人只有一双筷子(用A、B分别表示这双筷子的两只),这两个人只有各自获A、B这两只筷子的候才能成功吃饭。可以想象,他们会产生冲突。尝试说明他们可能产生哪些冲突?怎么解决这些冲突?
AB可能产生的冲突(俩人用甲和乙代替):
- 甲拿A,乙拿B,俩人都不能吃饭(或者互换)。
- 甲先拿到AB,乙空手。但是乙有吃饭的需求,他只能用眼睛(监听器)观察甲,放下筷子才拿起AB吃饭。(或者互换)
- 甲和乙同时需要吃饭,同时需要AB两双筷子,但是俩人之间没有优先级(比如甲要让着乙),产生了竞争,他俩一个都吃不上饭。
解决办法:
- ①设立俩人绝对优先级,优先级高的那个人有需要必须先处理,无论乙是不是正在用还是需要用,一切以甲为准。
- ②设立一个相对优先级,比如同时需要吃饭,先让甲吃完,乙再吃。如果乙在吃的时候甲需要吃,则甲需要等待乙使用完毕,再吃。
- ③最简单的就是,再拿一双筷子,从硬件上解决问题(多核处理器)。
- ④最粗暴的就是,杀掉乙(结束进程),让甲自己独占筷子,从根源解决问题。
原文地址:http://www.cnblogs.com/magicfat/p/16890203.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性