手机登录wordpress,搜索引擎推广seo,页面设计介绍,seo服务方法系列文章目录
单例模式介绍 单例模式之静态常量饿汉式 单例模式之静态代码饿汉式 单例模式之线程不安全懒汉式 文章目录 系列文章目录前言一、单例设计模式介绍二、单例设计模式八种方式三、单例—静态常量饿汉式1.静态常量饿汉式介绍2.静态常量饿汉式案例3.静态常量饿汉式优缺…系列文章目录
单例模式介绍 单例模式之静态常量饿汉式 单例模式之静态代码饿汉式 单例模式之线程不安全懒汉式 文章目录 系列文章目录前言一、单例设计模式介绍二、单例设计模式八种方式三、单例—静态常量饿汉式1.静态常量饿汉式介绍2.静态常量饿汉式案例3.静态常量饿汉式优缺点 四、单例—静态代码块饿汉式1.静态代码块饿汉式案例2.静态代码块饿汉式优缺点 五、单例—线程不安全懒汉式1.线程不安全懒汉式案例2.线程不安全懒汉式优缺点 总结 前言
大家好呀欢迎来到柚子的博客~ 昨天可以定端午节的票了大家准备去哪里玩呢o(▽)ブ 提示以下是本篇文章正文内容下面案例可供参考
一、单例设计模式介绍
1所谓类的单例设计模式就是采取一定的方法保证在整个的软件系统中对某个类只能存在一个对象实例并且该类只提供一个取得其对象实例的方法。 2比如Hibernate的SessionFactory它充当数据存储源的代理并负责创建Session对象。SessionFactory并不是轻量级的一般情况下一个项目通常只需要一个SessionFactory就够这时就会使用到单例模式。 3并且该类只提供一个取得其对象实例的方法当然这个方法是静态的。
二、单例设计模式八种方式
1饿汉式静态常量 2饿汉式静态代码块 3懒汉式线程不安全 4懒汉式线程安全同步方法 5懒汉式线程安全同步代码块 6双重检查 7静态内部类 8枚举 悄悄话醒目的这几种是可以使用的哦特别推荐使用后三种。 三、单例—静态常量饿汉式
1.静态常量饿汉式介绍
饿汉式如果确定这个单例一定会使用一次时就可以使用。
2.静态常量饿汉式案例
1构造器私有化 2类的内部创建对象 3向外暴露一个静态的公共方法 4代码实现如下
public class SingletonTest01 {public static void main(String[] args) {//测试Singleton instance Singleton.getInstance();Singleton instance2 Singleton.getInstance();System.out.println(instance instance2);//trueSystem,out.println(instance.hashCode instance.hashCode());System.out.println(instance2.hashCode instance2.hashCode());}
} //饿汉式静态变量
class Singleton {//1.构造器私有化外部能newprivate Singleton() {}//2.本类内部创建对象实例private final static Singleton instance new Singleton();//3.提供一个公有的静态方法返回实例对象public static Singleton getInstance() {return instance;}
} 3.静态常量饿汉式优缺点
1优点这种写法比较简单就是在类装载的时候就完成实例化。避免了线程同步问题。 2缺点在类装载的时候就完成实例化没有达到Lazy Loading的效果。如果从始至终从未使用过这个案例则会造成内存的浪费。 3这种方式基于classloader机制避免了多线程的同步问题不过instance在类装载时就实例化在单例模式中大多数都是调用getInstance方法但是导致类装载的原因有很多种因此不能确定有其他的方式或者其他的静态方法导致类装载这时候初始化instance就没有达到lazy loading的效果。 4结论这种单例模式可用可能造成内存浪费。 注饿汉就是太饿了不管如何先吃上再说。(这个名字起的真是太形象了)O(∩_∩)O 四、单例—静态代码块饿汉式
1.静态代码块饿汉式案例
代码如下示例
public class SingletonTest02 {public static void main(String[] args) {//测试Singleton instance Singleton.getInstance();Singleton instance2 Singleton.getInstance();System.out.println(instance instance2);//trueSystem.out.println(instance.hashCode instance.hashCode());System.out.println(instance2.hashCode instance2.hashCode());}
}//饿汉式(静态变量)
class Singleton {//1.构造器私有化外部能newprivate Singleton() {}//2.本类内部创建对象实例private static Singleton instance;static { //在静态代码块中创建单例对象instance new Singleton();}//3.提供一个公有的静态方法返回实例对象public static Singleton getInstance() {return instance;}
}2.静态代码块饿汉式优缺点
1这种方式和上面的方式“静态常量饿汉式”其实类似只不过将类实例化的过程放在了静态代码块中也是在类装载的时候就执行静态代码块中的代码初始化类的实例。优缺点和上面是一样的。 2结论这种单例模式可用但是可能造成内存浪费。
五、单例—线程不安全懒汉式
1.线程不安全懒汉式案例
代码如下示例
public class SingletonTest03 {public static void main(String[] args) {System.out.println(懒汉式1线程不安全);Singleton instance Singleton.getInstance();Singleton instance2 Singleton.getInstance();System.out.println(instance instance2);//true System.out.println(instance.hashCode instance.hashCode());System.out.println(instance2.hashCode instance2.hashCode());}
}class Singleton {private static Singleton instance;private Singleton() {}//提供一个静态的公有方法当使用到该方法时才能创建instance//即懒汉式public static Singleton getInstance() {if(instance null) {instance new Singleton();}return instance;}
}2.线程不安全懒汉式优缺点
1起到了Lazy Loading的效果但是只能在单线程下使用。 2如果在多线程下一个线程进入了ifsingleton null判断语句块还未来得及往下执行另一个线程也通过了这个判断语句这时便会产生多个实例所以在多线程环境下不可使用这种方式。 3结论在实际开发中不要使用这种方式。 总结
单例模式介绍单例模式之静态常量饿汉式(可以使用)单例模式之静态代码饿汉式(可以使用)单例模式之线程不安全懒汉式(不要使用)。 ╭◜◝ ͡ ◜◝╮ ( ˃̶͈◡˂ ̶͈ )感觉有用的话欢迎点赞评论呀 ╰◟◞ ͜ ◟◞╯