Java 设计模式
一 单例模式 : 解决的问题:就是可以保证一个类在内存中的对象唯一性。 public class SingleInstance { private static volatile SingleInstance singleInstance = null; private SingleInstance() { } public SingleInstance getInstance() { if (singleInstance == null) { //A synchronized (SingleInstance.class) { if (singleInstance == null) { singleInstance = new SingleInstance(); //B } } } return singleInstance; } } Note 1:添加volatile修饰避免B处指令重排序时其他线程拿到B处可能还未初始化的单例对象(完成了内存分配,引用的赋值 还未来得及进行对象的初始化)然后在A处判断单例对象不为空直接返回的未初始化的对象。 Note 2: synchronized关键字保证了临界区内变量的可见性和原子性,但无法保证临界区之外访问的变量的原子性。如果对单例对象的读写完全在临界区内,那么就不会出现线程安全问题。不过,这样就带来了性能问题。 Note 3