以前你编写的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两双筷子,但是俩人之间没有优先级(比如甲要让着乙),产生了竞争,他俩一个都吃不上饭。

解决办法:

  • ①设立俩人绝对优先级,优先级高的那个人有需要必须先处理,无论乙是不是正在用还是需要用,一切以甲为准。
  • ②设立一个相对优先级,比如同时需要吃饭,先让甲吃完,乙再吃。如果乙在吃的时候甲需要吃,则甲需要等待乙使用完毕,再吃。
  • ③最简单的就是,再拿一双筷子,从硬件上解决问题(多核处理器)。
  • ④最粗暴的就是,杀掉乙(结束进程),让甲自己独占筷子,从根源解决问题。

最新文章

  1. 通过transform修改位置 大小 旋转 形变
  2. jQuery Ion.Calendar 日期/日历
  3. eclispe或者myeclispe maven jar包不能部署到tomcat下
  4. Hiho 1232 北京网络赛 F Couple Trees
  5. iOS 消息推送报错NSCocoaErrorDomain Code=3000
  6. 下载老版本的Xcode
  7. hdu2874 LCA
  8. JNI文件中命名类与JAVA文件中匹配
  9. usb转串口如何配置?
  10. background:url 的使用方法
  11. Yii学习笔记之三(在windows 上安装 advanced )
  12. 扯蛋css
  13. Output\TEST.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.
  14. vue指令v-on示例解析
  15. 对The C programming language一书第6.6节代码的理解
  16. LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>
  17. servlet 拦截器 (filter)
  18. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  19. JS判断手机还是电脑访问网站
  20. 系统编码、文件编码与python系统编码

热门文章

  1. sys.argv的用法
  2. PostgreSQL事务隔离级别
  3. 仿 MVC 三大特性
  4. C#的闭包捕获变量与英语中Nice to meet you的联系
  5. Qt实现简单的TCP协议(客户端的实现)
  6. REDIS基础要点
  7. lg7863
  8. 将视图直接转换成表的SQL语句
  9. Sublime Text3高效开发之编写代码块(snippet)
  10. JMeter压力测试之环境搭建、脚本调试及报错解决方法(Linux版)