zoukankan      html  css  js  c++  java
  • 笔记:深入理解JVM 第五部分 高效并发 (第12、13章)

    一、第12章 Java 内存模型

    1、Java内存模型


    内存间的交互操作:lock、unlock、read、load、use、assign、store、write


    volatile 变量:保证变量对所有线程可见;禁止指令重排序优化。

    long、double 特殊规则:允许将没有volatile修饰的64位数据操作分成两次32位数据操作。


    Java内存模型的特性:

    (1)、原子性:除了long和double,对基本类型数据访问都是原子的

    (2)、可见性:一个线程修改了共享变量,其他线程能看到。通过volatile、synchronized、final实现。

    (3)、有序性:本线程内看所有操作都是有序的, 即线程内表现为串行;线程外看本线程,所有的操作都是无序的,即指令重排序线程缓存与主内存同步延迟通过volatile、synchronized 可保证有序性。


    2、Java线程

    线程的实现: 通过操作系统的内核线程(轻量级进程)实现

    线程的调度:采用抢占式调度

    状态转换:New、Runnable、Waiting、Blocked、Teminated



    二、第13章 线程安全和锁优化

    1、线程安全

    (1)、不可变:final

    (2)、绝对线程安全:难以实现

    (3)、相对线程安全:Vector、Hashtable、同步集合等

    (4)、线程兼容:HashMap、ArrayList等

    线程安全实现方法

    (1)、互斥同步:synchronized 和 Lock

    (2)、非阻塞同步:CAS

    (3)、无同步方案:ThreadLocal



    2、锁优化

    (1)、自旋锁:就是一个空的while 循环。

    (2)、锁消除

    (3)、锁粗化

    (4)、轻量级锁:CAS。

    (5)、偏向锁:锁偏向于第一个获得它的线程。







  • 相关阅读:
    Oracle11g 安装 -Linux
    oracle 11g安装-window
    将本地文件上传到github
    highcharts实现画辅助线功能并删除
    eclipse中一个项目引用另一个项目的方法
    Kubernetes label简单使用
    spark 报错 InvalidClassException: no valid constructor
    NFS服务配置 Linux
    Ubuntu-Server18.04开启无线网卡并配置静态ip
    Ubuntu18.04安装mysql并配置远程访问
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276176.html
Copyright © 2011-2022 走看看