-
- 2014-08-17
- 科研
对 Java 内存模型的理解
Java 内存模型
Java内存模型规定了在多线程程序中,什么样的行为是允许出现的,什么样的行为是禁止出现的。这样说可能有点抽象,我们换一个角度。将程序行为抽象成读操作和写操作,每个线程有自己的局部变量,同时线程之间还存在共享变量。那么一个多线程程序执行结束后,所有变量会有一个最终值。Java内存模型来决定什么样的值合法,什么样的值不合法。
内存模型不能要求的太严格,这样会阻碍很多优化方法,降低程序执行的效率,但也不能要求的太松,因为这样会导致一些执行结果违反我们的直觉。例如指令间的重排序问题,如果线程内部的指令完全按照程序中指明的次序执行,并且每次执行一条指令,执行的结果立即生效,那么就会阻碍很多优化方法,但这样对程序员是有好处的,因为程序员很容易推断程序的执行结果,这样写出的程序就容易与自己的意图一致。这种内存模型被称为顺序一致性模型(Sequential Consistency)。反之,如果为了优化程序执行效率,重排序的可能性有很多,那么程序的效率是提高了,但对程序员来说,就很难推断程序的执行结果。这一类的内存模型被称为Relaxed Memory Model。
Read More ... -
- 2014-07-27
- 技术  设计模式
单例模式
- 定义
单例模式确保一个类只有一个实例,并提供一个全局访问点
- 解释
从定义可以看出,特点是这个类只有一个实例。那么,为什么要这么做呢?原因在于,有些时候,这个类只有一个实例会节约资源,或者只有一个实例才能保证整个程序运行正确,一致。例如:线程池,缓存,对话框,日志对象等等 。
Read More ... -
- 2014-07-27
- 技术  设计模式
外观模式
- 定义
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统的更容易使用。
- 解释
我有一个多功能的盒子,盒子让提供了100个接口,每个都有不同的功能。现在我要把这个盒子给别人用了,我只想让别人用到其中5个接口,或者别人只需要其中5个接口。那么,我可以再做一个盒子,这个盒子套在原来的盒子外面,并且只提供5个接口。这样,用的人会觉得很方便,我也觉得这样很安全。
我们可能要问,为什么原来的盒子要有100个接口呢?为什么不直接提供5个接口呢?原因可能会很多,可能这个盒子我们没法控制,是别人给我们的。也可能这个盒子要与其它众多盒子配合使用,其它盒子要用到其它的95个接口。
Read More ... -
- 2014-07-25
- 技术  设计模式
-
- 2014-07-12
- 技术  java  源代码阅读