java并发学习:synchronized 的不足之处

 程老师原文地址:http://flychao88.iteye.com/blog/1852893
原文如下:

1、不能够跨越多个对象。 

2、当在等待锁对象的时候,不能中途放弃,直到成功。 

3、等待没有超时限制。 

4、不能中断阻塞。

*******************************学习笔记**********************************************

看完了一时无从下手,JDK帮我们屏蔽了很多底层的东西。就整理点相关的内容

1可以从JMM角度去理解:

“synchronized” — 保证在块开始时都同步主内存的值到工作内存,而块结束时将变量同步回主内存。

其实JVM是没有工作内存这东西,可以理解为抽象出来跟现在多核结构有关的。如“程普,高速寄存器,主内存”之间的关系。要保证速度,还要保证安全。背后都是编译器和处理器对于CAS操作的具有Volatile的读和写支持,也就是插入特定指令禁止重排序来保证。

了解至此,还不够深入,有需要的可以深入看看cpu是怎么处理指令的。

2常见的锁对象问题:

对于实例同步方法,锁是当前实例对象。

对于静态同步方法,锁是当前对象的Class对象

对于同步方法块,锁是Synchonized括号里配置的对象。

当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。 

如果深入理解同步,锁存在Java对象头里。

Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在Java SE1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。

先整理到这里.

 


你可能感兴趣的:(并发系列整理)