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

线程安全

java语言中的线程安全

  1 不可变。Immutable 的对象一定是线程安全的

  2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施,通常需要付出很大甚至是不切实际的代价,在java api中标注自己是线程安全的类,大多数都不是绝对的线程安全

  3 相对线程安全

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

  5 线程对立

线程安全的实现方法

  1 互斥同步 Murual Exclusion & Synchronization

    常见的并发正确性保障手机,同步是指多个线程并发访问共享数据时,保存证共享数据在同一时刻只被一个线程使用

    最基本的互斥手段是synchronized关键字。

    还可以使用java.util.concurrent包中的锁来实现同步 ReentrantLock,

    JDK1.6对synchronized做了优化,效率与ReentrantLock基本上是完全持平了。

  2 非阻塞同步

    基于冲突检测的乐观并发策略

    CAS操作 Compare-and-Swap

  3 无同步方案

锁优化

  1、自旋锁与自适应自旋

  2、锁消除

  3、锁粗化

  4、经量级锁

  5、偏向锁

整本书 可以在Blog :《深入理解Java虚拟机》笔记  中来统查看要点。

深入理解java虚拟机-第13章-线程安全与锁优化的更多相关文章

  1. 深入理解java虚拟机(7)---线程安全 & 锁优化

    关于线程安全的话题,足可以使用一本书来讲解这些东西.<Java Concurrency in Practice> 就是讲解这些的,在这里 主要还是分析JVM中关于线程安全这块的内容. 1. ...

  2. 深入理解JAVA虚拟机阅读笔记6——线程安全与锁优化

    线程安全:如果一个对象可以安全的被多个线程同时使用,那它就是线程安全的. 一.Java中的线程安全 1.不可变 不可变的对象一定是线程安全的.String.枚举类型.java.lang.Number的 ...

  3. 《深入理解Java虚拟机》-----第13章 线程安全与锁优化

    概述 在软件业发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维方式直接站在计算机的角度去抽象问题和解 ...

  4. 深入理解Java虚拟机读书笔记9----线程完全与锁优化

    九 线程完全与锁优化   1 Java语言中的线程完全         ---线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用 ...

  5. Java并发编程学习:线程安全与锁优化

    本文参考<深入理解java虚拟机第二版> 一.什么是线程安全? 这里我借<Java Concurrency In Practice>里面的话:当多个线程访问一个对象,如果不考虑 ...

  6. 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常

    第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域  

  7. 深入理解java虚拟机-第六章

    第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 ...

  8. 深入理解java虚拟机_第二章_读书笔记

    1.本章内容目录: 概述 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位 ...

  9. 深入理解Java虚拟机-第1章-走进Java-读书笔记

    第 1 章 走近 Java 前言 Java 的技术体系主要是由支撑 Java 程序运行的虚拟机.为各开发领域提供接口支持的 Java API.Java 编程语言及许许多多的第三方 Java 框架(如 ...

随机推荐

  1. 那些年java MD5加密字符编码的坑

    相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码.浏览器的字符编码等和对方不一致,所以就需要转码统一字符. 以下是笔者转码过 ...

  2. Ubuntu安装zabbix

     1.安装依赖包     安装mysql     安装nginx apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql p ...

  3. ReverseLinkedList,ReverseLinkedList2,链表反转问题

    ReverseLinkedList: public class ReverseLinkedList { public ListNode reverseList(ListNode head) { if( ...

  4. 关于http请求ContentType:application/x-www-form-urlencoded

    在又一次http请求过程中,模拟post请求提交form表单数据一直提示部分参数为空,后面检查发现是缺少ContentType:application/x-www-form-urlencoded的原因 ...

  5. scp 上传 下载 文件

    linux 中的ssh命令: scp 可以用来上传本地文件到远程服务器 或下载远程服务器中的文件到本地 1. 上传本地文件到远程服务器 scp readme.md user@www.*****.com ...

  6. 实用SQL语句

    sp_depends t_im_flow 获取到与这个表有关系的存储过程.触发器.函数.视图等.

  7. 第四章 SSL和Proxy高级选项

    在前一章,我们已经学习了HTTP消息如何通过Burp Proxy进行拦截和处理,本章我们将继续学习HTTPS协议消息的拦截和处理. HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入 ...

  8. Codeforces Round #378 (Div. 2)F - Drivers Dissatisfaction GNU

    http://codeforces.com/contest/733/problem/F 题意:给你一些城市和一些路,每条路有不满意程度和每减少一点不满意程度的花费,给出最大花费,要求找出花费小于s的最 ...

  9. 总结网站Mysql优化

    Mysql存储引擎 选择合适的存储引擎Innodb  myisam myisam: 写入数据非常快,适合使用场合dedecms/phpcms/discuz/微博系统等写入.读取操作多的系统. inno ...

  10. SpringMVC之ModelAndView的 jsp值在浏览页面不显示

    Tomcat运行后浏览器上显示的结果! <%@ page isELIgnored="false" %>改变后问spring mvc开发过程中, 经常会给model ad ...