一、synchronized 原理
synchronized:锁,俗称悲观锁,锁的粒度比较大:JVM,在了解锁之前,前提条件是先了解对象的构成
对象的构成
对象的构成其实包含三部分:对象头,实例数据,对其填充
实例对象:存放对象的相关属性数据
对其填充:主要是补齐高位空格部分
对象头:俗称Markword,包含GC年龄段、锁信息,hashCode等信息
synchronized:其实包含两个重要的对象属性,monitorEntity与monitorExit,当线程进入到代码中的时候,monitEntity进行加1,当代码执行完之后,monitExit会进行-1,当然对应对象头的变化是: markword中的线程数量会进行+1,-1
在加锁的时候,要区分对象锁与类锁,多个线程在争取对象锁的时候:是同一个对象,如果其中的一个线程拿到该对象的锁,则其它线程就不能去执行该对象加锁的代码
如果加锁的对象是类对象,只要其中一个线程获得类对象的锁,其它线程同样不能执行加锁的代码
获取锁代码: