单例模式的几种方式

2人阅读 评论(0) 收藏 举报
分类:

首先是饿汉式:

public class Singleton {

private static Singleton s = new Singleton();

//屏蔽外部的new
private Singleton() {
super();
}
//提供一个全局的访问点
public static Singleton getInstance() {
return s;
}

public void A(){
System.out.println("xixi");
}

}

public class SingletonTest {

    public static void main(String[] args) {

// TODO Auto-generated method stub
/* Singleton s1 = Singleton.s;
Singleton s2 = Singleton.s;*/

Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();

System.out.println(s1 .equals(s2));   //true
s1.A();

}

对于懒汉式,在类加载的过程中就会去创建这个类的实例,并没有达到延迟加载的效果,但是线程是安全的!


然后是懒汉式:跟饿汉式的区别就是没有在一开始就初始化了,

//会在这个方法里面初始化

public synchronized static Singleton getInstance() {

                if(s==null) {

                s = new Singleton();

}

              return s;

}

注意:没有加锁的懒汉式是线程不安全的,但是如果加了锁之后,每个线程执行该方法的时候都会进行线程等待,就会导致同步情况下执行效率低!

所以只需要判断第一次是否为空的时候需要加锁,其余时候是不需要加锁的,为了解决这个问题,就有了双重验证式!

    

public  static Singleton getInstance() {

                if(s==null) {

                        synchronized(Singleton.class) {

                if(s== null) {

                s=new Singleton();

}

}

            s = new Singleton();

}

              return s;

}

注:双重验证式具有延迟加载,线程安全,同步情况效率高,唯一就是实现相对复杂!


对于类加载方式,具有以上所有的优点,并且实现简单

public class Singleton {
//屏蔽外部的new

private Singleton() {

}

    //静态内部类,用于创建唯一的Singleton的实例

private static class OnlyInstanceHolder{

        static private Singleton Only = new Singleton();

}

//公开的唯一访问点

public static Singleton getInstance() {

    return OnlyInstanceHolder.Only;

}

唯一的缺陷是不能防止反序列化!







查看评论

单例模式的几种实现方式

当一个类只能有一个对象时,往往会用到单例模式,例如,现实生活中有很多临界资源,像 打印机、处理器(单核)、皇帝、太子等等,它们都是稀有资源,只能有一个实例对象。下面用java将单例模式实现:     ...
  • z507263441
  • z507263441
  • 2013-11-10 02:05:14
  • 10496

单例模式的五种实现方式

单例模式可以说是23中设计模式中应用最广的一种模式了。        定义:确保某一个类只有一个实例,自行实例化并且想整个系统提供这个实例。       使用场景:避免某个类产生多个对象而消耗过多...
  • soul_code
  • soul_code
  • 2015-12-05 09:53:06
  • 10200

Java单例模式的三种实现方式

1, singletonpublic class Singleton { private Singleton() { System.out.println("This is co...
  • gsw204
  • gsw204
  • 2016-09-06 19:37:28
  • 1210

java中实现单例模式的几种方式,简单易懂

一、饿汉式单例类 public class Singleton { private Singleton(){ } private static Singl...
  • yuxin6866
  • yuxin6866
  • 2016-08-14 09:39:19
  • 2996

单例模式两种实现方法,优缺点各是什么?

实现一//单例模式一 public class Test{ private static Test test = new Test(); public Test(){}; public s...
  • yaozhiqi1905658804
  • yaozhiqi1905658804
  • 2017-04-29 14:16:39
  • 622

几种单例模式demo

  • 2017年01月10日 10:09
  • 25.23MB
  • 下载

设计模式——单例模式的几种实现方式

1.饿汉式:静态常量 这种方法非常的简单,因为单例的实例被声明成static和final变量了,在第一次加载类到内存中时就会初始化,所以会创建实例本身是线程安全的。public class Singl...
  • bingogirl
  • bingogirl
  • 2016-09-01 00:03:25
  • 2067

Singleton单例模式的几种创建方法

创建单例类有以下几种方式: 饿汉式 懒汉式(加同步锁的懒汉式、加双重校验锁的懒汉式、防止指令重排优化的懒汉式) 登记式单例模式 静态内部类单例模式 枚举类型的单例模式 备注: 其中“枚举类型的单例...
  • hl_java
  • hl_java
  • 2017-04-12 22:53:47
  • 471

设计模式:单例模式的三种创建方式及其各自的优缺点

单例模式: 确保一个类只有一个实例,并提供全局访问点。在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量。确定在性能和资源上 的限制,如何选择适当的方案来实现单例,以解决多线程的...
  • wen942467928
  • wen942467928
  • 2015-08-24 15:22:00
  • 752
    个人资料
    持之以恒
    等级:
    访问量: 987
    积分: 131
    排名: 113万+
    文章分类
    文章存档