双重检查锁定及单例模式

public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
    public static synchronized Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}

由于对getInstance()方法做了同步处理,synchronized将导致性能开销。如果getInstance()方 法被多个线程频繁的调用,将会导致程序执行性能的下降。反之,如果getInstance()方法不会被 多个线程频繁的调用,那么这个延迟初始化方案将能提供令人满意的性能。

在早期的JVM中,synchronized(甚至是无竞争的synchronized)存在巨大的性能开销 。因此, 人们想出了一个“聪明”的技巧:双重检查锁定(Double-Checked Locking)。人们想通过双重检查 锁定来降低同步的开销

必须会写

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

你可能感兴趣的:(笔记,面试,单例模式,java,开发语言)