码迷,mamicode.com
首页 > 编程语言 > 详细

Java单例模式

时间:2017-04-06 12:31:29      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:创建对象   sign   懒汉式   test   延迟   ==   lin   类加载   pac   

单例模式确保一个类只有一个实例存在。

在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。

 

饿汉法

public class Singleton {  

    private static Singleton = new Singleton();
    private Singleton() {}
    public static getSignleton(){
        return singleton;
    }
}
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。但是无法做到延迟创建对象。
 
懒汉式
public class Singleton {
    private static Singleton singleton = null;
    private Singleton(){}
    public static Singleton getSingleton() {
        if(singleton == null) singleton = new Singleton();
        return singleton;
    }
}
懒汉式单例类.在第一次调用的时候实例化自己,没有考虑线程安全问题,它是线程不安全的
public class Singleton {   
    private Singleton(){}         
    public static Singleton getSingleton(){
        return Holder.singleton;
    }
     private static class Holder {
        private static Singleton singleton = new Singleton();
    }
}
通过静态内部类,延时加载,并且能保证线程安全(这样就避免了静态实例在Singleton类加载的时候就创建对象,并且由于静态内部类只会被加载一次,所以这种写法也是线程安全的:)
 
枚举写法
public enum EnumSingleton{
    INSTANCE;
}
通过EnumSingleton test=EnumSingleton.INSTANCE来访问
使用枚举除了线程安全和防止反射强行调用构造器之外,还提供了自动序列化机制,防止反序列化的时候创建新的对象。因此,Effective Java推荐尽可能地使用枚举来实现单例。

Java单例模式

标签:创建对象   sign   懒汉式   test   延迟   ==   lin   类加载   pac   

原文地址:http://www.cnblogs.com/corolcorona/p/6672789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!