专栏首页cwl_JavaJava线程与内存模型

Java线程与内存模型

1.工作流程图

2.内存之间的交互操作

  • 2.1 Lock (锁定): 把一变量标识为一条线程独占的状态
  • 2.2 unlock (解锁) : 把处于锁定状态的变量释放出来
  • 2.3 read (读取) : 把一个变量从主内存加载到工作内存
  • 2.4 load (载入) : 把工作内存中的变量值复制到变量副本当中
  • 2.5 use (使用) : 将值传递给工作引擎
  • 2.6 assign (赋值) : 把从执行引擎接收到的值传递给工作内存的变量
  • 2.7 store (存储) : 把工作变量当中的值传送到主内存当中,之后可以进行write操作
  • 2.8 write (写入) : 把操作完成之后的值写到主内存的对应变量当中

3.volatile类型变量的特殊规则

  • 3.1 可见性:只要是volatile修饰的变量,那么只有有任一个线程对该变量进行了修改,那么这次的修改对所有线程就是可见的,不会出现脏读或者是幻读的问题
  • 3.2 禁止指令重排序优化,保证代码顺序执行,防止其他线程抢占式串行执行

4.对于long和double类型的特殊规则

Java内存模型当中上述2.1~2.8的所有操作都是要求要具备原子性的,但是对于64位的数据类型long和double来说却是需要分割成来此来进行操作的

5.Java线程调度

  • 协同式调度
    • 优点是线程顺序执行,每个线程执行完成之后通知下一个线程执行,线程的切换时可知的
    • 缺点是一旦有一条线程的代码出现问题,一直不通知下一个线程,那么就可能导致线程的阻塞问题
  • 抢占式调度
    • 优点是线程的切换是随机的,切换速度快,不容易出现线程阻塞问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3分钟速读原著《Java并发编程的艺术》(二)

    cwl_java
  • JDK1.9-线程池

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    cwl_java
  • Java基础-多线程(三)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 多线程系列问题汇总

    多线程编程中,一般线程的个数都大于 CPU 的核心个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效的执行,通常 CPU 采取的...

    happyJared
  • 高级java必须清楚的概念:原子性、可见性、有序性

    原子性、可见性、有序性是多线程编程中最重要的几个知识点,由于多线程情况复杂,如何让每个线程能看到正确的结果,这是非常重要的。 原子性 原子性是指一个线程的操作是...

    Java技术栈
  • java面试必备之ThreadLocal

    按照传统的经验,如果某个对象是非线程安全的,在多线程环境下对象的访问需要采用synchronized进行同步。但是模板类并未采用线程同步机制,因为线程同步会降低...

    JKXQJ
  • O1-开源框架使用之EventBus

    说明使用POSTING,发布与订阅在同一个线程,也就是子线程,更新UI会崩 说明使用MAIN,不管发布者在哪,订阅者都在main线程,可更新UI,但不能耗时操...

    张风捷特烈
  • 谈谈java的ThreadLocal

    简单介绍 ThreadLocal一般称为线程本地变量,它是一种特殊的线程绑定机制,将变量与线程绑定在一起,为每一个线程维护一个独立的变量副本。通过Thread...

    Spark学习技巧
  • 并发编程之Java内存模型

    JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。 JMM体现在以下几个方...

    海仔
  • 并发编程基础知识点

    java404

扫码关注云+社区

领取腾讯云代金券