以前你编写的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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性