Spring aware接口的作用是什么
245
2022-11-06
实现Singleton模式-java
实现Singleton模式
以下写法均为延迟加载!在调用方法时才进行实例化基础版 要想构造一个单例模式,需要这个类最多只能有一个实例化对象。也就是外部类无法进行new等实例化操作!这样需要让构造方法设置为私有:
private Singleton(){};
然后在内部进行实例化的控制
public class Singleton { private Singleton(){}; private static Singleton singleton = null; public static Singleton getSingleton() { if (singleton == null) { singleton = new Singleton(); } return singleton; }}
以上单例模式是非线程安全的!基础版2.0-线程安全版 线程不安全进行加锁:
public class Singleton { private Singleton(){}; private static Singleton singleton = null; private static Object object = new Object(); public static Singleton getSingleton() { synchronized (object){ if (singleton == null) { singleton = new Singleton(); } } return singleton; }}
基础版3.0 - 优化版 优化版就是不进行无脑加锁影响效率,在加锁前对已经存在的实例返回
public class Singleton { private Singleton(){}; private static Singleton singleton = null; private static Object object = new Object(); public static Singleton getSingleton() { if (singleton != null) { return singleton; }else { synchronized (object){ if (singleton == null) singleton = new Singleton(); } return singleton; } }}
基础版4.0-双重加锁 volatile 关键字加锁,会对我们的进行singleton进行弱加锁判断
public class Singleton { private static Object object = new Object(); private Singleton(){}; private static volatile Singleton singleton = null; public static Singleton getSingleton() { if (singleton != null) { return singleton; }else { synchronized (object){ if (singleton == null) singleton = new Singleton(); } return singleton; } }}
高级版 利用静态内部类 和final 关键字的唯一性创建一个安全的单例!只能说: 牛逼!
public class Singleton { private Singleton(){}; private static class SingletonHelper { public static final Singleton instance = new Singleton(); } public static final Singleton getInstance() { return SingletonHelper.instance; }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~