Synchronized是内置锁,隐式锁.
JDK1.6之前性能比较低->Java对象->Monitor缓存->OS->互斥量(重量级锁)->依赖于操作系统线程Pthread库.JVM运行在用户态,调用操作系统需要切换用户状态,很消耗资源,
JDK1.6之后 重写->Java对象->对象锁(偏向锁1个线程)->对象锁(轻量级锁存在多个线程但是竞争不激烈,多个现在在没拿到锁之前处于自旋状态,不需要占用CPU资源)->互斥量(重量级锁)->依赖于操作系统线程Pthread库.JVM运行在用户态,调用操作系统需要切换用户状态,很消耗资源.
Synchronized用法
加在静态方法上面修饰的是这个方法
加在非静态方法上面,谁new这个对象就是谁,相当于this
代码块
System.out.println()是Synchronized(this)如果项目中有很多这个,会导致QPS上不去
RentrantLock是显式锁.
Dog li ->AQS->ReentrntLock
可重入
公平性
如图