26.java中锁的机制

 

synrhronized

 

 如果synrhronized加在静态方法上,则锁住整个class;如果加在实例方法中,锁this,即当前对象。

 

 

自旋锁

 

基本思路就是自旋,不成功再阻塞,尽量降低阻塞的可能性,这可以提高那些执行时间很短的代码块的性能。

 

 

CAS与偏向锁

 

 CAS(Comparet and swap)就好比安检仪器,如果检测同步操作时有异常就反复尝试,直到异常释放才可以操作成功。 

 偏向锁好比有了一个记录机制,如果一个线程第一次检测没问题,之后再使用它就不需要检测。如果遇到了一个比他权限高的线程,持有偏向锁的线程会先挂起,然后等全限高的线程执行完,再恢复运行。

 

 

轻量级锁与重量级锁

 

轻量级锁如CAS,没有涉及到操作系统干涉线程的阻塞和挂起。性能消耗小。但是如果这个CAS竞争非常激烈,会导致性能下降,那么直接就用重量级锁如synrhronized

 

 

原图

26.java中锁的机制