- 每个 Java 对象都有一个内置锁
- 线程运行到非静态的 synchronized 同步方法上时,自动获得实例对象的锁
- 持有对象锁的线程才能运行 synchronized 同步方法或代码块时
- 一个对象只有一个锁
- 一个线程获得该锁,其他线程就无法获得锁,直到第一个线程释放锁。任何其他线程都不能进入该对象上的 synchronized 方法或代码块,直到该锁被释放。
- 释放锁是指持锁线程退出了 synchronized 同步方法或代码块
- 类可以同时拥有同步和非同步方法
- 只有同步方法,没有同步变量和类
- 在加锁时,要明确需要加锁的对象
- 线程可以获得多个锁
- 同步应该尽量缩小范围