volatile是java虚拟机提供最轻量级的同步机制. volatile两个特性:1,保证同步的变量对所有线程是可见的.虽然对所有线程是即时可见的,但是却不保证原子性,也就是不保证线程安全,比如对于创建20个线程,每个线程都执行i++操作,执行100次,但是i输出的结果小于2000.因为一条i++用javap反编译是由4条指令来执行的.所以我们通过synchronized来保证原子性. 下面给出一个volatile适用的场景: 当shutdown()方法被执行时,保证所有线程中执行dowork…
1.概述 摩尔定律:描述处理器晶体管数量与运行效率之间的发展关系.Amdahl定律:通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力. 从摩尔定律到Amdahl定律的转变,代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程. 并发的好处: 1.计算机的运算速度与它的存储和通信子系统速度的差距太大,充分利用磁盘I/0.网络通信.数据库访问等的等待时间.2.一个服务端同时服务多个客户端,已提升TPS. 本章主要讲解如何在安全的基础上,高效的并发. 2.硬件的效率与…
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考<Java并发编程的艺术> 关于线程安全和线程安全的程度参考了<Java并发编程实战> 图片参考https://www.processon.com/u/5dee0443e4b093b9f775065c#pc 一丶Java内存模型 1.概述 多任务处理已经是操作系统的必备技能,计算机被要求…
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有领会到的心得和踩过的坑,将会对这些文章进行更新. 另外,人脑更喜欢图胜过文字,有些流程先用文字码在那儿,后面有时间再画图. 1.「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势 2.「深入理解Java虚拟机」学习笔记(2)- JVM内存区域 3.[Java]「深入理解Java虚拟机…
概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O.网络通信或者数据库访问上.如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的浪费,而让计算机同时处理几项任务则是最容易想到.也被证明是非常有效的“压榨”手段. 除了充分利用计算机处…
八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和Java中的变量有所区别,它包括类字段.实例字段和构成数组对象的元素,但不包括局部变量和方法参数.     ---Java内存模型规定:         · 所有的变量都存储在主内存中:         · 每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副拷贝,线程对变…
13.Java内存模型与线程 1.Java内存模型 Java 内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到主内存和从内存中取出变量值的底层细节 该变量指的是 实例字段.静态字段.和构成数组对象的元素,不包含线程私有的 局部变量和方法参数 Java线程 -> 工作内存 -> Save 和 load 操作 -> 主内存 每个线程都有自己的工作内存,工作内存中保存了该线程使用的变量的主内存副本,线程对变量的所有操作(读取赋值)都在工作内存中进行,而不能直接读…
第12章 Java内存模型与线程 Java内存模型  主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行. 内存间交互操作: 1 lock 作用于主内存的变量,它把一个变量标识为一个线程独占的状态. 2 unlock 作用于主内存的变量,把锁定的变量释放出来 3 read 作用于工作内存的变量,把一个变量的值从主内存传输到线程的工作内存中. 4 load 作用于工作…
高效并发一 Java内存模型与Java线程 本篇文章,首先了解虚拟机Java 内存模型的结构及操作,然后讲解原子性,可见性,有序性在 Java 内存模型中的体现,最后介绍先行发生原则的规则和使用. 在多数情况下让计算机同时去做几件事情,不仅是因为计算机的运算能力强大,还有一个重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘 I/O, 网络通信或者数据库访问上. 1.1 硬件的效率与一致性 计算机的存储设备与处理器运算速度有很大的差距,所以加入了一层高效缓存…
多任务处理在现代计算机操作系统中是一项必备的功能,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,更重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O,网络通信或者数据库访问上,因此处理器在大部分时间里都处于等待其他资源的状态. 如果让计算机并发执行若干个运算任务就可以更充分地利用计算机处理器的效能,但是其中的复杂性是绝大多数的运算任务都不可能只靠处理器计算就能完成,处理器至少要与内存交互,如读取运算数据.存储运算结果等,这个I/O操作无法…