前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 并发编程基础

java 并发编程基础

原创
作者头像
CoffeeLand
修改2020-03-26 18:12:52
4550
修改2020-03-26 18:12:52
举报
文章被收录于专栏:CoffeeLandCoffeeLand

Table of Content

  • 计算机基础
  • java的原子性操作
  • java的线程通信
  • java锁机制
  • reference

计算机基础

Bus 总线的概念

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线地址总线控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。 -- 百度百科

通俗理解: Bus 是公共汽车的意思, 能够让所有组件上车, 在特定的线路上, 将data进行传输, 既然是车,就有速度, 速度是Mhz来表示.

While the wheels on the bus may go "round and round," data on a computer's bus goes up and down. Each bus inside a computer consists of set of wires that allow data to be passed back and forth. Most computers have several buses that transmit data to different parts of the machine. Each bus has a certain size, measured in bits (such as 32-bit or 64-bit), that determines how much data can travel across the bus at one time. Buses also have a certain speed, measured in megahertz, which determines how fast the data can travel.

The computer's primary bus is called the frontside bus and connects the CPU to the rest of the components on the motherboard. Expansion buses, such as PCI and AGP, allow data to move to and from expansion cards, including video cards and other I/O devices. While there are several buses inside a computer, the speed of the frontside bus is the most important, as it determines how fast data can move in and out of the processor.

来自 <https://techterms.com/definition/bus>

Bus通信原理

在计算机中,数据通过总线在处理器和内存之间传递.

每次处理器和内存之间的数据直接的数据传递都是通过一系列步骤来完成, 这一系列的步骤称为总线事务.

总线事务包括读事务和写事务.

读事务将数据从内存传送到处理器

写事务将数据从处理器写入内存中

每个事务会读/写内存中一个或多个物理上连续的字.

总线事务总做机制

当一个处理器执行总线事务期间, 总线会禁止其他的处理器和IO设备执行内存的读/写, 也就是说其他处理器的总线事务会被等待.

总线的这些工作机制可以把所有处理器对内存的访问以串行化的方式来执行. 也就是在任意的时间点, 最多只能有一个处理器可以访问内存, 这个特性确保总线事务之中的内存读写操作具有原子性

java不对long和double类型数据保持原子性,

是因为他们都是8个字节, 64位, 对32位机器可能会把64拆成两个32, 从而进入不同的事务里,因此很难保证原子性操作

java的原子性操作

java的原子性操作是靠循环的CAS来实现的

java的线程通信

java的线程通信是靠 共享内存消息通信 来是实现的

java锁机制

java的轻量级锁

volatile: 使用了锁的happen-before 原则

代码语言:javascript
复制
锁的happen-before原则保证释放锁和获取锁的两个线程之间的内存可见性. 
也就是说, 对一个volatile变量的读,总是能看到任意线程对这个volatile变量的写入

volatile的内存语义

  • volatile写的内存语义

当写一个volatile变量时,JMM会把该线程的对应本地内存的共想变量值刷新到内存里去

  • volatile读的内存语义

当读一个volatile变量时,JMM会把该线程里的本地内存置为无效, 该线程直接从内存里读取该变量里的值

JMM如何实现volatile

编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序.

插入内存屏障的目的就是禁止编译器和处理器的重排序

reference

  • java并发编程的艺术

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算机基础
    • Bus 总线的概念
      • Bus通信原理
        • 总线事务总做机制
          • java不对long和double类型数据保持原子性,
          • java的原子性操作
          • java的线程通信
          • java锁机制
            • java的轻量级锁
              • volatile的内存语义
                • JMM如何实现volatile
                • reference
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档