课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件编程开发程序员都在学习和使用的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程开发并发问题都有哪些。
1、如何快速而又精准地解决“并发”类的疑难杂症?
理解这件事情的本质,追本溯源,深入分析这些Bug的源头在哪里。
2、CPU、内存、I/O设备的速度差异有多大?
CPU是天上一天,内存是地上一年(假设CPU执行一条普通指令需要一天,那么CPU读写内存得等待一年的时间)
内存和I/O设备的速度差异就更大了,内存是天上一天,I/O设备是地上十年。
3、为了平衡这三者的速度差异,设计者们做了哪些努力?
CPU增加了缓存,以均衡与内存的速度差异;
操作系统增加了进程、线程,以分时复用CPU,进而均衡CPU与I/O设备的速度差异;
编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。
4、我们的程序都在享受着前辈们带来的速度上的优化,但是天下没有免费的午餐,缩小贫富差距会带来哪些问题?
缓存导致的可见性问题
线程切换带来的原子性问题
编译优化带来的有序性问题
5、什么是可见性?
一个线程对共享变量的修改,另外一个线程能够立刻看到
6、为什么缓存会带来可见性的问题?
以前穷的时候,就一个CPU,一块缓存,所有的线程都是他来执行的,都共享他里面的数据,数据和内存里面的是一致的。
7、什么是有序性?
程序按照代码的先后顺序执行
8、什么是有序性问题?
编译器为了优化性能,有时候会改变程序中语句的先后顺序,例如程序中:“a=6;b=7;”编译器优化后可能变成“b=7;a=6;”
9、因为编译器悄悄改变我们程序执行顺序而出bug的有哪些案例?
单例模式双重检测的时候编译器改变了我们对象初始化的顺序导致出现空指针异常。
10、为什么long型变量在32位机器上进行加减操作存在并发隐患?
Long占8个字节,64位,64位的到32位机器上就得拆分命令了,容易出现原子性的问题。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。