synchronized关键字用来实如今并发编程中线程间的同步,synchronized相对于volatile关键字实现的是基于对象锁的同步,在java中每一个对象均可以同步的锁。synchronized支持有实例方法、静态方法、实例方法中的同步块、静态方法中的同步块。html
参考资料:java
聊聊并发(二)Java SE1.6中的Synchronized编程
- 对于同步方法,锁是当前实例对象。
- 对于静态同步方法,锁是当前对象的Class对象。
- 对于同步方法块,锁是Synchonized括号里配置的对象。
4 同步的原理并发
JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但二者的实现细节不同。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另一种方式实现的,细节在JVM规范里并无详细说明,可是方法的同步一样能够使用这两个指令来实现。monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处, JVM要保证每一个monitorenter必须有对应的monitorexit与之配对。任何对象都有一个 monitor 与之关联,当且一个monitor 被持有后,它将处于锁定状态。线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 monitor 的全部权,即尝试得到对象的锁。oracle
Eliminating SynchronizationRelated Atomic Operations with Biased Locking and Bulk Rebiasingoop
(注:32bitJVM)线程
http://www.cnblogs.com/paddix/p/5367116.htmlhtm