JAVA并发编程(1)——(概念注意事项,核心问题-可见性,原子性,有序性,volatile关键字)

java并发编程

1.1 并行与并发

单核 cpu 下,线程实际是串行执行的。操作系统中有一个组件叫做任务调 度器,将 cpu 的时间片,分给不同的线程使用,只是由于 cpu 在线程间(时间片 很短)的切换非常快,人类感觉是同时运行的。 总结为一句话就是:微观串行,宏观并行,一般会将这种线程轮流使用 cpu 的做法称为并发,concurrent.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdfvBUuw-1679140400987)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1642639138705.png)]

多核 cpu 下,每个核(core)都可以调度运行线程,这时候线程可以是并 行的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxcjX0ls-1679140400989)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1642639168772.png)]

例:

大家排队在一个咖啡机上接咖啡,交替执行,是并发;两台咖啡机上面接咖啡, 是并行。

从严格意义上来说,并行的多任务是真的同时执行,而对于并发来说,这个过程 只是交替的,一会执行 任务 A,一会执行任务 B,系统会不停地在两者之间切 换。

并发说的是在一个时间段内,多件事情在这个时间段内交替执行

并行说的是多件事情在同一个时刻同事发生。

1.2 多线程

Java 是最先支持多线程的开发的语言之一,

Java 从一开始就支持了多线程 能力。由于现在的 CPU 已经多是多核处理器了,是可以同时执行多个线程的.

1.3 多线程优点

多线程技术使程序的响应速度更快 ,可以在进行其它工作的同时一直处于活动

状态,程序性能得到提升.

性能提升的本质 就是榨取硬件的剩余价值(硬件利用率).

1.4 多线程问题

多线程带来的问题是什么?

安全性(访问共享变量),性能(切换开销等)

1.5 (JMM)java内存模型

问题

硬件的发展中,一直存在一个矛盾,CPU、内存、I/O 设备的速度差异。

速度排序:CPU > 内存 > I/O 设备

为了平衡这三者的速度差异,做了如下优化:

  • CPU 增加了缓存,以均衡内存与 CPU 的速度差异;
  • 操作系统以线程分时复用 CPU,进而均衡 I/O 设备与 CPU 的速度差异;
  • 编译程序优化指令执行次序,使得缓存能够得到更加合理地利用

JMM

​ Java 内存模型(Java Memory Model,JMM)规范了 Java 虚拟机与计算 机内存是如何协同工作的。Java 虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为 Java 内存模型

​ Java 内存模型,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现 让 Java 程序在各种平台下都能达到一致的并发效果,JMM 规范了 Java 虚拟机 与计算机内存是如何协同工作,规定了一个线程如何以及何时可以看到由其他线 程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。

计算机在高速的 CPU 和相对低速的存储设备之间使用高速缓存,作为内存 和处理器之间的缓冲。将运算需要使用到的数据复制到缓存中,让运算能快速运 行,当运算结束后再从缓存同步回内存之中

​ 在多处理器的系统中(或者单处理器多核的系统),每个处理器内核都有自己 的高速缓存,它们有共享同一主内存(Main Memory)。

当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致。

JVM 主内存与工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值