java 设计模式---单例模式

来源:互联网 发布:mac截屏 编辑:程序博客网 时间:2024/06/01 19:09
package day06;//对于单例模式的几种实现方式,知道饿汉式和懒汉式的区别,线程安全,资源加载的时机,还有懒汉式为了实现线程安全的3种方式的细微差别。public class SingleDemo {public static void main(String[] args) {Single s1 = Single.getSingle();Single s2 = Single.getSingle();s1.setName("zhangsan");//s2.setName("lisi");System.out.println(s2.name);System.out.println(s1 == s2);//只创建了一个实例// Single s3 = new Single(); 单例模式不允许创建对象Single1 ss1 = Single1.getInstance();Single1 ss2 = Single1.getInstance();System.out.println(ss1 == ss2);}}//饿汉式和懒汉式区别//饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,//而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。/*1、线程安全:饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。*/class Single {// 单例模式演示 ----饿汉式---安全private static Single s = new Single();public static Single getSingle() {return s;}private Single() {}String name;public void setName(String name) {this.name = name;}public String getName() {return this.name;}}class Single1 {// 单例模式演示 ----懒汉式---线程不安全,必须加同步private static Single1 ss = null;//在getInstance方法上加同步(这种方法 该例子没用,这种方法会降低性能的)public static Single1 getInstance() {if (ss == null) {synchronized (Single.class) {//双重检查锁定,避免了 每次同步的性能损失if (ss == null)ss = new Single1();}}return ss;}private Single1() {}String name;public void setName(String name) {this.name = name;}}

0 0