用在方法声明里, 或者用在代码块上;
用在静态方法上, 对象锁是当前的字节码 Class 对象;
用在普通方法上, 对象锁是当前的实例对象;
同步代码块, 对象锁是 synchronized(x) 为括号里面的对象;
一般和 x.wait(), x.notify(),x.notifyAll() 配合使用, 进行线程间通讯的;
该关键字禁止指令重排, 保证了数据的可见性, 和操作的原子性;
在同步代码块上使用, 在编译成字节码的时候, 添加 monitorenter 和 monitorexit 进行控制同步;
在方法声明中添加 Synchronized 关键字生命同步方法, 编译成字节码会在方法的 flag 中添加一个 ACC_SYNCHRONIZED 的标识, 代码该方法是一个同步方法.
(整理笔记待完善)
来源: http://www.bubuko.com/infodetail-3484106.html