读书人

单例模式详解-二

发布时间: 2014-01-08 14:18:52 作者: rapoo

单例模式详解-2
?使用map容器来实现缓存,用空间来换取时间,在数据库中常常用到。
?依照上图可以看出懒汉式是线程不安全的,因为在线程A即将要创建实例的时候,线程B也将创建实例,这样就创建了连个实例,所以线程不安全public class Singleton {/** * 对保存实例的变量添加volatile的修饰 */private volatile static Singleton instance = null;private Singleton(){}public static Singleton getInstance(){//先检查实例是否存在,如果不存在才进入下面的同步块if(instance == null){//同步块,线程安全的创建实例synchronized(Singleton.class){//再次检查实例是否存在,如果不存在才真的创建实例if(instance == null){instance = new Singleton();}}}return instance;}}

? ?双重检查加锁机制的实现会使用一个关键字volatile,被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而使多个线程能正确处理该变量。

读书人网 >行业软件

热点推荐