章节介绍

  本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程。

synchronized实现同步的基础:

  Java中的每个对象都可以作为锁。具体有三种形式:

  (1)对于普通同步方法,锁是当前实例对象;

  (2)对于静态同步方法,锁是当前类的Class对象;

  (3)对于同步方法快,锁是Synchronized括号中配置的对象。

     当一个线程试图访问同步代码块时,它首先必须得到锁,退出或者抛出异常时必须释放锁。

    (synchronized在JVM中的实现原理.....)  

Java对象头

  synchronizede用的锁存在Java对象头里。

  补充(来自网络博文):Java对象保存在内存中时,由三部分组成:对象头、实例数据、对齐填充字节

     a.对象头也是由3部分组成,如下:

     (1)Mark Word ;

       第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向                           时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为“MarkWord”。

       (2)指向类的指针;

        即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例

       (3)数组长度(只有数组对象才有);

       如果对象是一个数组, 那在对象头中还必须有一块数据用于记录数组长度。(需要的话,可以单独找资料学习下这部分的讲解...)

       b.实例数据

        实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义                            的,都需要记录起来。

        对象的实例数据就是在java代码中能看到的属性和他们的值。

     c.对齐填充字节

        因为JVM要求java的对象占的内存大小应该是8bit的倍数,所以后面有几个字节用于把对象的大小补齐至8bit的倍数,没有特别的功能。   

锁的升级和对比

  在JavaSE 1.6中,锁分为四中状态:无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态。

  这几个状态会随着竞争情况逐渐升级,但是不能往后降级。这种策略的目的是为了提高 获得锁 和 释放锁 的效率。

补充:CAS(Compare And Swap )算法介绍

  CAS操作是乐观锁,每次不加锁,而是假设没有冲突去完成某项操作。如果因为冲突失败就重试,知道成功为止。

  CAS思想:三个参数,一个当前内存值V,旧的预期值A,即将更新值B,当且仅当预期值A 和内存值V相同时,将内存值修改为B并返回true,否则什么也不做,并返回false。

待续.....偏向锁 和 轻量级锁

锁的有点和缺点

【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized的更多相关文章

  1. Android艺术开发探索——第二章:IPC机制(下)

    Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...

  2. 【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile

    章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译= ...

  3. 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习

    章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...

  4. java并发编程实战笔记---(第二章)线程安全:正确性

    ThreadA__________     同步 ______________ 异步 ___________     异步 ThreadB__________         ____________ ...

  5. 如何评价《Java 并发编程艺术》这本书?

    对于书评这件事情,我其实是不想写的,因为每个人都有自己的一个衡量标准,每个人眼中都有自己的哈姆雷特,是好是坏每个人都褒贬不一.如果对于书中的知识你都掌握了,你只是想把它作为一种知识串联的记忆体的话,那 ...

  6. [书籍翻译] 《JavaScript并发编程》第四章 使用Generators实现惰性计算

    本文是我翻译<JavaScript Concurrency>书籍的第四章 使用Generators实现惰性计算,该书主要以Promises.Generator.Web workers等技术 ...

  7. 《Java并发编程的艺术》Java并发机制的底层实现原理(二)

    Java并发机制的底层实现原理 1.volatile volatile相当于轻量级的synchronized,在并发编程中保证数据的可见性,使用 valotile 修饰的变量,其内存模型会增加一个 L ...

  8. java并发编程笔记(四)——安全发布对象

    java并发编程笔记(四)--安全发布对象 发布对象 使一个对象能够被当前范围之外的代码所使用 对象逸出 一种错误的发布.当一个对象还没构造完成时,就使它被其他线程所见 不安全的发布对象 某一个类的构 ...

  9. Java程序设计(2021春)——第二章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...

随机推荐

  1. spring+hibernate+springmvc整合框架搭建

    搭建maven web项目这里不再讲述,详情请查看http://www.cnblogs.com/wql025/p/5215570.html 现在讲述项目的搭建过程. 1.通过maven导入项目所用的j ...

  2. Java实现微信网页授权

    开发前的准备: 1.需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret: 2.进入公众号开发者中心页配置授权回调域名.具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本 ...

  3. basic--factory

    <?php /* 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例: 工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要 ...

  4. ubuntu14.04下svn版本管理系统的安装及常用命令的使用整理

    ubuntu14.04下安装svn$sudo apt-get install subversion 执行这一步就安装完成了,在ubuntu先安装很方便 安装完成后,创建版本库目录,由于是本地环境,就在 ...

  5. HTML相对路径与绝对路径

    在网页制作的过程中,少不了跟路径打交道,比如,包含一个文件,插入一个图片等,与路径都有关系,如果使用了错误的文件路径,就会导致引用失效(无法浏览链接文件,或无法显示插入的图片等).初学者可能会感到困惑 ...

  6. IAR 条件断点

    条件断点是IDE的一个重要功能,在IAR调试时候,经常跟踪一个数据,但是对较大的buffer,用普通的断点或live watch都不好跟踪. 比如某个buffer里一个数,我们知道他在第几个,但是却从 ...

  7. GAN基础

    Generative Adversarial Networks GAN框架     GAN框架是有两个对象(discriminator,generator)的对抗游戏.generator是一个生成器, ...

  8. Ubuntu dpkg 查询已安装的软件包

    要检查特定的包,比如firefox是否安装了,使用这个命令: dpkg -s firefox 要列出你系统中安装的所有包,输入下面的命令: dpkg --get-selections 你同样可以通过g ...

  9. CodeForces 292D Connected Components (并查集+YY)

    很有意思的一道并查集  题意:给你n个点(<=500个),m条边(<=10000),q(<=20000)个询问.对每个询问的两个值xi yi,表示在从m条边内删除[xi,yi]的边后 ...

  10. jquery倾斜的动画导航菜单

    1. [代码]完整源代码  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...