`

《深入理解java虚拟机》第十三章 线程安全和锁优化

 
阅读更多

第十三章  线程安全和锁优化

线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用

方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的

 

java中的线程安全

各种操作共享的数据分为以下五类

1) 不可变 不可变对象一定是线程安全的,String,常用枚举类,Long和Double等数值的包装类型,BigInteger,Bigdecimal等;AtomicInteger,AtomicLong并非不可变对象

2)绝对线程安全 

3)相对线程安全 java.util.Vector,HashTable,Collections的synchronizedCollection()方法包装的集合

4)线程兼容 对象本身并不是线程安全的,但是可以通过调用端正确的使用同步手段来保证对象在并发情况可以安全的使用

5)线程对立 无论调用端采用同步措施,would无法在多线程环境中并发使用的代码,如System.setIn(),System.setOut();

 

线程安全的实现方法

 

1)互斥同步(阻塞同步)

临界区,互斥量,信号量是主要的互斥的实现方式

最常用的互斥手段,synchronized

J.U.C下的ReentrantLock

 

ReentrantLock 比synchronized 多一些功能

1)等待可中断 当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步快很有帮组

2)可实现公平锁  多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁

3)锁可以绑定多个条件  一个ReentrantLock 绑定多个Conditiion

 

所以1.6之后提倡使用synchronized,对它进行了优化

 

2) 非阻塞同步

 

基于冲突检测的乐观并发策略,就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享数据有争用,产生了冲突,那就采取其他措施(不断的尝试,直到成功为止)

CAS compare and Swap 比较并交换

如果在这段期间,它的值曾经被改变成了B,后来又被改回A,那CAS操作就会认为它没有改变  CAS的“ABA”问题

 

3) 无同步方案

可重入代码

线程本地存储

 

 

锁优化

 

1) 自旋锁和自适应自旋

自旋锁:让线程执行一个忙循环(自旋)

-XX:+UseSpinning 来开启,默认关闭 

 

2)锁消除

虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除

 

3)锁粗化

就是加的锁太多,将加锁同步的范围扩展到整个操作序列的外部

 

4)轻量级锁

传统锁时重量级的,轻量级时指在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗

无竞争的情况下使用CAS 去消除同步使用的互斥量

 

5)偏向锁

无竞争的情况下把整个同步都消除掉,连CAS操作都不用做了

分享到:
评论

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!  本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...

    深入Java虚拟机(原书第2版)及书中源代码

    第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 指令invokespecial 第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B ...

    深入java虚拟机中文第2版

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。 前言 第1章 ...

    深入java虚拟机第二版

    深入java虚拟机第二版 第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 ...

    深入java虚拟机

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第13节Java虚拟机-ExactVM00:03:35分钟 | 第14节Java虚拟机-HotSpotVM00:04:23分钟 | 第15节Java虚拟机-kvm00:03:04分钟 | 第16节Java虚拟机-JRockit00:04:12分钟 | 第17节Java虚拟机-j900:04:23分钟 | 第18节...

    深入Java虚拟机

    第13章 逻辑运算 13.1 逻辑操作码 13.2 一个模拟:“Logical Results” 13.3 随书光盘 13.4 资源页 第14章 浮点运算 14.1 浮点数 14.2 Inner Float:揭示Java float类型内部 性质的applet 14.3 浮点...

    深入JAVA虚拟机(第2版)

    第13章 逻辑运算 13.1 逻辑操作码 13.2 一个模拟:“Logical Results” 13.3 随书光盘 13.4 资源页 第14章 浮点运算 14.1 浮点数 14.2 Inner Float:揭示Java float类型内部性质的applet 14.3 浮点...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 328 12.3.6 先行发生原则 / 330 12.4 Java与线程 / 333 12.4.1 线程的实现 / 333 12.4.2 Java线程调度 / 337 12.4.3 状态转换 / 339 12.5 本章小结 / 341 第13章 线程安全与锁优化 / 342 13.1 概述 / 342 ...

    Java虚拟机

    第13章 线程安全与锁优化 13.1 概述 13.2 线程安全 13.2.1 Java语言中的线程安全 13.2.2 线程安全的实现方法 13.3 锁优化 13.3.1 自旋锁与自适应自旋 13.3.2 锁消除 13.3.3 锁粗化 13.3.4 轻量级锁 13.3.5...

    深入理解Android:卷I--详细书签版

    第9章 深入理解Vold和Rild 395 9.1 概述 396 9.2 Vold的原理与机制分析 396 9.2.1 Netlink和Uevent介绍 397 9.2.2 初识Vold 399 9.2.3 NetlinkManager模块分析 400 9.2.4 VolumeManager模块分析 408 9.2.5 ...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第13讲 Java虚拟机-ExactVM 00:03:35  第14讲 Java虚拟机-HotSpotVM 00:04:23  第15讲 Java虚拟机-kvm 00:03:04  第16讲 Java虚拟机-JRockit 00:04:12  第17讲 Java虚拟机-j9 00:04:23  第18讲 Java...

    深入理解Android卷1全

    第2章 深入理解JNI / 13 2.1 JNI概述 / 14 2.2 学习JNI的实例:MediaScanner / 15 2.3 Java层的MediaScanner分析 / 16 2.3.1 加载JNI库 / 16 2.3.2 Java的native函数和总结 / 17 2.4 JNI层MediaScanner的分析 / 17 ...

    Java并发编程实践 PDF 高清版

    随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。...第13章 显示锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java存储模型 附录A 同步Annotation 参考文献 索引

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    Java开发技术大全(500个源代码).

    示例描述:本章学习Java的输入和输出。 CopyFile.java 文件复制实例 dir.java 显示目录下的所有文件和目录 encrypt.java 文件加密 FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例...

    java面向对象程序设计答案

    第十一章 * 选择题: + Java的JOptionPane类是指对话框类。 + Java的ActionListener接口是指事件监听器接口。 * 填空题: + JOptionPane类是指对话框类。 + ActionListener接口是指事件监听器接口。 本文总结...

    实战Java高并发程序设计(第2版)PPT模板.pptx

    4锁的优化及注意事项 4.1有助于提高锁性能的几点建议 4.2java虚拟机对锁优化所做的努力 4.3人手一支笔:threadlocal 4.4无锁 4.5有关死锁的问题 4.2Java虚拟机对锁优化所做的努力 4.3人手一支笔:ThreadLocal 4.4...

    java基础案例与开发详解案例源码全

    第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件和目录的操作328 13.2 JavaIO原理332 13.3 流类结构333 13.3.1 InputStream和OutputStream333 13.3.2 Reader和Writer334 13.4 文件流...

Global site tag (gtag.js) - Google Analytics