单例模式的写法和线程安全性的讨论

//饿汉模式:单例模式,就是无论用不用,什么时候用,在类加载的时候就实例化一个这个类的对象//然后等到使用的时候,就是使用同一个实例对象//好处:在多线程的环境下使用这种方法,可以避免多线程带来的冲突。与之相对应的是,懒汉模式(按需实例化)class Singleton1{private Singleton1(){}private static Singleton1 s1 = new Singleton1();public static Singleton1 getSingleton(){return s1;}}//懒汉模式:单例模式,,//好处:直到使用才进行实例对象的初始化,避免内存的浪费//坏处:会遇到线程安全性问题class Singleton2{private Singleton2(){}private static Singleton2 s2 = null;public static Singleton2 getSingleton2(){if(s2 == null){s2 = new Singleton2();}return s2;}}//登记式模式:借助内部类,属于懒汉式单例,因为Java机制规定,//内部类SingletonHolder只有在getInstance()方法第一次调用的时候才会被加载(实现了lazy),//而且其加载过程是线程安全的,所以这种模式克服了懒汉和饿汉模式的缺点class Singleton3{private Singleton3(){}private static class SingleHolder{private final static Singleton3 s3 = new Singleton3();}public static Singleton3 getSingleton3(){return SingleHolder.s3;}}//普通加锁解决单例模式的线程安全问题//分析:虽然解决了线程安全问题,但是每个线程调用getInstance都要加锁,//我们想要只在第一次调用getInstance时加锁,就需要进行改进class Singleton4{private static Singleton4 s4= null;private Singleton4(){}public static synchronized Singleton4 getSingleton4(){if(s4 == null){s4 = new Singleton4();}return s4;}}

欲望以提升热忱,毅力以磨平高山。

单例模式的写法和线程安全性的讨论

相关文章:

你感兴趣的文章:

标签云: