Synchronized原理

synchronized -- 对象加锁

  在字节码中,使用monitorenter/monitorexit 来控制同步的范围。    

   所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数。【如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候, 计数变为1。

每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。 只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。每当任务离开时,计数递减,当计数为0的时候,锁被完全释放。】

  由此可以得出,synchronized原理是基于栈中的某一对象来控制的。所以【锁对象而不是锁方法是常用的synchronized的优化方法】

synchronized -- 方法锁

  实际上,synchronized锁的是“this”.

原文地址:https://www.cnblogs.com/plxx/p/5100237.html