Java高并发编程——三大特性,锁升级,CAS,Volatile

本文深入探讨Java并发编程的三大特性——可见性、有序性和原子性。详细讲解了CPU缓存机制导致的可见性问题,如何通过volatile关键字解决。同时,阐述了CPU乱序执行的现象,以及如何防止指令重排。此外,还介绍了锁的级别、锁升级过程,以及CAS无锁机制及其ABA问题。
摘要由CSDN通过智能技术生成

目录

可见性

有序性

原子性


并发编程的三大特性

可见性 有序性 原子性

可见性

进程和线程

进程:静态概念,资源分配的最小单位,例如QQ.exe启动之后它就是一个进程,内存会分配一块空间给它。

线程:动态概念,QQ.exe启动后它会从main方法开始运行,main就是一个线程,main也是主线程。线程是资源调度的最小单位。进程里包含线程,所有线程共享所属进程的资源。

计算机组成

 CPU在执行线程时并不会直接和内存打交道,因为从内存上读数据往往是很慢的,它会把要用到的数据存储在寄存器(Registers)上,这样访问速度会非常快。ALU是计算单元,PC是程序计数器,由于Registers大小并不大,但是为了条效率我们往往会希望它大一点,解决方案就是个Registers加一些缓存以扩大存储空间。

线程调度

 CPU在切换线程时,会将上一个线程的Registers信息和PC信息缓存到一个cache中,之后再切换为另一个线程。切换回去就会从cache中再把原来线程的信息拿回来,反复地恢复现场。

 一个程序中线程数并不是越多越好,线程在切换时很消耗CPU资源,如果线程太多,CPU会把精力投入到切换线程中,从而降低了程序执行速度。

单核CPU未经过超线程处理时,执行多线程程序有没有意义?

有,即便是只有单核CPU,在一些比较耗时的操作例如等待网络响应,等待IO等操作时,CPU也是处于待机阶段,如果在这段时间里,有其他线程可以把这个空闲时间利用起来,CPU的利用效率是特别高的,会比单线程执行更快。

超线程

一个CPU中的ALU对应多个Registers和PC。

CPU缓存机制

CPU访问内存非常慢,CPU的运行速度和访问内存的速度比为:1:100。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值