03 synchronized

Posted lifeone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 synchronized相关的知识,希望对你有一定的参考价值。

synchronized

1、 锁机制的特性

  • 互斥性:在同一时间只允许一个线程持有某个对象锁(原子性)
  • 可见性:必须确保在锁被释放之前,对共享变量所在的修改,对于随后获得该锁的另一个线程是可见的

2、synchronized的使用

2.1 锁的分类

  • 对象锁:synchronized(this|object) 修饰非静态方法

    每个对象都会有一个monitor对象,这个对象就是java对象的锁

    类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰
  • 类锁:synchronized(类.class) 修饰静态方法

    类锁实际上是通过对象锁实现的,即类的class对象锁

    每个类只有一个Class对象,所以每个类只有一个类锁

    2.2 锁的原理(monitor)

    技术图片

  • 代码块加锁是通过monitorenter和monitorExist配合使用实现
  • 方法的加锁通过表示为ACC_SYNCHRONIZED实现

2.3 java虚拟机对synchronized的优化

一个对象实例包含:对象头、实例变量、填充数据

对象头中包含了锁的标志位信息:
技术图片

技术图片

  • 当其他线程竞争失败后,不要马上转换锁的级别,而是执行空循环(自旋锁)
  • 锁排除:JIT在编译的时候把不必要的锁去掉





以上是关于03 synchronized的主要内容,如果未能解决你的问题,请参考以下文章

day-10

[2016-03-03][UVA][120][Stacks of Flapjacks]

Fianl D10 9

[2016-03-03][UVA][1374][Power Calculus]

Cheatsheet: 2016 03.01 ~ 03.31

学习记录(2022年3月份记录)