尝试获取对象锁,若能够获得锁则继续下一步,否则线程进入阻塞队列
- 执行synchronized保护的代码块
- 释放锁(若需要重入则进行相应操作。详细请看本人博客《理解Synchronized(4)》)
- 对实例方法synchronized保护的是this,对类方法保护的是class对象
- synchronized类方法和实例方法保护的对象不同,不同线程可同时访问synchronized类方法和实例方法
- synchronized同步的对象可以是任意对象,任意对象都有锁和等待队列(注:对象必须不为null,对象为null则他相关锁和阻塞队列无从谈起)
synchronized保护的是对象,而非代码块,只要访问的是同一个对象的synchronized方法,即使是不同代码块也会进行同步操作。
多个线程同时可以进行同一个synchronized 方法,只要他们访问的对象不同即可。