• Java内存模型(Java Memory Model,JMM):
    • 主内存与工作内存:Java内存模型主要是定义程序中各个变量的访问规则。Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,每条线程
      还有自己的工作内存(Working Memory),线程的工作内存保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进
      行,而不能直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,线程、主内存、
      工作内存关系如下:
    • 内存间交互操作:
      8种操作:
               1.lock(锁定):作用于主内存的变量,它把一个变量标识标识为一条线程独占的状态。
               2.unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其它线程锁定。
               3.read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。
               4.load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。
               5.use(使用):作用于工作内存的变量,它把工作内存中的一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用
                                              到变量的值的字节码指令时将会执行这个操作。
               6.assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量,每当虚拟机遇到一个给
                                                  变量赋值的字节码指令时执行这个操作。
               7.store(存储):作用于工作内存的变量,它把工作内存中的一个变量的值传送到主内存中,以便随后的write操作使用。
               8.write(写入):作用于主内存的变量,它把store操作从工作内存中得到的变量值放入主内存的变量中。
      操作规则:
              1.不允许read和load、store和write操作之一单独出现。
              2.不允许线程丢弃它最近的assign操作。
              3.不允许线程无原因地把线程的工作内存同步回主内存中。
              4.新变量只能在主内存中产生。
              5.只能有一个线程在同一时刻执行lock操作。
              6.lock时会清空工作内存中该变量副本的值。
              7.unlock必须成对出现。
              8.unlock会同步回主内存。
    • valatile:Java虚拟机最轻量级的同步机制,1.保证此变量对所有线程的可见性。2.禁止指令重排序优化。
    • 原子性、可见性、有序性。
    • 先行发生原则:1.程序次序规则(Program Order Rule) 2.管程锁定规则(Monitor Lock Rule) 3.volatile变量规则(volatile variable rule)
                                   4.线程启动规则(thread start rule) 5.线程终止规则(thread termination rule) 6.线程中断规则(thread interruption rule)
                                   7.对象终结规则(finalizer rule) 8.传递性(transitivity)
  • Java与线程:
    • 线程的实现:1.使用内核线程实现 2.使用用户线程实现 3.使用用户线程加轻量级进程混合实现
    • Java线程调度:线程调度是指系统为线程分配处理器使用权的过程,有两种:1.协同式(Cooperative) 2.抢占式(Preemptive)
    • 状态转换:java定义了5种线程状态:1.新建(New)2.运行(Runable) 3.等待(Waiting) 4.阻塞(Blocked) 5.结束(Terminated)

第十二章 Java内存模型与线程的更多相关文章

  1. 第十二章 Java内存模型与线程(待续)

    ············

  2. 深入理解java虚拟机-第12章Java内存模型与线程

    第12章 Java内存模型与线程 Java内存模型  主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...

  3. 《Java并发编程实战》第十六章 Java内存模型 读书笔记

    Java内存模型是保障多线程安全的根基,这里不过认识型的理解总结并未深入研究. 一.什么是内存模型,为什么须要它 Java内存模型(Java Memory Model)并发相关的安全公布,同步策略的规 ...

  4. java并发编程实战:第十六章----Java内存模型

    一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...

  5. 《深入理解Java虚拟机》-----第12章 Java内存模型与线程

    概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...

  6. 第12章 Java内存模型与线程

    参考<深入理解Java虚拟机> 一.Java内存模型 1.Java内存模型 2.内存间交互操作  流程图: 3.volatile关键字 两个特性: 3.1.保证变脸对所有线程的可见性: 由 ...

  7. 第十六章 Java内存模型(待续)

    ········

  8. Java并发程序设计(三) Java内存模型和线程安全

    Java内存模型和线程安全 一 .原子性 原子性是指一个操作是不可中断的.即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰. 思考:i++是原子操作吗?  二.有序性 Java代 ...

  9. JVM(7) Java内存模型与线程

    衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而 TPS 值与程序的并发能力又有非常 ...

随机推荐

  1. 从CSS到houdini

    0. 前言 平时写CSS,感觉有很多多余的代码或者不好实现的方法,于是有了预处理器的解决方案,主旨是write less &do more.其实原生css中,用上css变量也不差,加上bem命 ...

  2. Mybatis集成Oracle

    首先需要导入Oracle的驱动,这部分会有一个天坑 Maven无法直接将我们所需的Oracle驱动加入项目中,手动加入依赖也是无效(原因还在分析),而且驱动无效如果不注意的话是看不出来的,他不会在编译 ...

  3. python学习笔记(1)python中的注释和安装python

    注释 目标 注释的作用 单行注释 多行注释 01注释的作用 在程序中对代码的标注说明,增强代码的可读性 以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用 为 ...

  4. MySQL_DML语言

    #MySQL--DML语言##SQL组成DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:insert,delete,update DCL:数据库控制语言,关键字:gra ...

  5. CentOS 7安全加固

    本次实验使用的centos 7 版本 一.查找系统中是否存在空密码账户 1.使用命令: awk -F: '($2==""){print $1}' /etc/shadow 直接查看. ...

  6. JTA事务管理

    何为分布式事务 一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务 和普通事务的区别 单一数据源,事务管理可以借助数据源本地事务完成,实现简单 分布式事务之困难:不可简单的借助数 ...

  7. vue简单实例代码

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  8. 面向对象A 知识点总结

  9. JavaScript判断该对象是否为数组

    typeof 用来检测数据类型,Function, String, Number, Undefined都可以使用typeof来判断. function test(){} console.log(typ ...

  10. composer.json

    {    "require": {        "doctrine/doctrine-orm-module": "0.*",        ...