1、延迟实例化方式:(懒汉模式)

public class Singleton {
  private static Singleton uniqueInstance;
  private Singleton(){
  }

  public static Singleton getInstance(){
    if(uniqueInstance == null){
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
}

对资源敏感的对象特别重要,缺点是线程不安全。

2、延迟实例化方式:(懒汉模式)

public class Singleton {
  private static Singleton uniqueInstance;
    private Singleton(){
    }

  public synchronized static Singleton getInstance(){
    if(uniqueInstance == null){
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
}

线程安全了,但是效率低,资源利用率不高,因为只有第一次执行此方法时,才需要同步,99%的场合用不到同步,而同步一个方法可能会造成程序执行效率下降100倍。

3、非延迟实例化方法:(饿汉模式)

public class Singleton3 {
  private static Singleton3 uniqueInstance = new Singleton3();
    private Singleton3(){
    }
    public static Singleton3 getInstance(){
      return uniqueInstance;
    }
}

4、双重检查加锁:
public class Singleton4 {
  private volatile static Singleton4 uniqueInstance;
    private Singleton4(){
    }
    public static Singleton4 getInstance(){
      if(uniqueInstance == null){
        synchronized (Singleton4.class){
          if(uniqueInstance == null){
            uniqueInstance = new Singleton4();
          }
        }
      }
    return uniqueInstance;
  }
}
volatile关键字确保:当uniqueInstance变量被初始化成Singleton4实例时,多个线程能正确处理uniqueInstance变量。

注意:

1)如果不是采用第五版的Java 2,双重检查加锁实现会失效;
2)如果使用多个类加载器,可能会导致单件失效而产生多个实例;
3)如果使用JVM1.2或之前的版本,必须建立单件注册表,以免GC将单件回收。

JAVA设计模式---单例模式的几种实现方式比较的更多相关文章

  1. JAVA中单例模式的几种实现方式

    1 线程不安全的实现方法 首先介绍java中最基本的单例模式实现方式,我们可以在一些初级的java书中看到.这种实现方法不是线程安全的,所以在项目实践中如果涉及到线程安全就不会使用这种方式.但是如果不 ...

  2. Java设计模式 - 单例模式 (懒汉方式和饿汉方式)

    概念: Java中单例模式是一种常见的设计模式,单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的写法有好几种,这 ...

  3. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

  4. Java设计模式の单例模式

    -------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...

  5. JAVA设计模式-单例模式(Singleton)线程安全与效率

    一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式 ...

  6. Java设计模式 - - 单例模式 装饰者模式

    Java设计模式 单例模式 装饰者模式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 静态代理模式:https://www.cnblogs.com/StanleyBlogs/p/1 ...

  7. 【设计模式】Java设计模式 - 单例模式

    [设计模式]Java设计模式 - 单例模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 分享学习心得,欢迎指正,大家一起学习成长! 原创作品,更多关注我CSDN: ...

  8. JAVA设计模式——单例模式

    单例模式的定义: Ensure a class has only one instance, and provide a global point of access to it.( 确保某一个类只有 ...

  9. JAVA实现单例模式的四种方法和一些特点

    JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下     一.饿汉式单例类 复制代码 代码如下: public class Singleton  {      private Sing ...

随机推荐

  1. hdu_2087 剪花布条(kmp)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. Mysql隔离级别,锁与MVCC

    关键词:事务,ACID,隔离级别,MVCC,共享锁,排它锁 阅读本文前请先阅读http://hedengcheng.com/?p=771 http://www.hollischuang.com/arc ...

  3. python写一个邮箱伪造脚本

    前言: 原本打算学php MVC的思路然后写一个项目.但是贼恶心, 写不出来.然后就还是用python写了个邮箱伪造. 0x01 第一步先去搜狐注册一个邮箱 然后,点开设置,开启SMTP服务. 当然你 ...

  4. c语言基础学习02_windows系统下的cmd命令

    =============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...

  5. ZipKin的原理的介绍

    结构概述       跟踪器(Tracers)存在在你的应用程序中生存,记录时间和关于操作的元数据.他们经常使用库,因此他们的使用对用户是透明的.例如,当它收到一个请求并发送一个响应时,一个感应器(i ...

  6. EC+VO+SCOPE for ES3

    词法环境 词法作用域 词法作用域(lexcical scope).即JavaScript变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码. 词法环境 用于定义特定变量和函数标识 ...

  7. A glance at endpoint security

    Last year hackers stole millions from Taiwan First Commercial bank's ATMs without using a card. This ...

  8. (Release Candidate)Candidate

    RC:(Release Candidate)Candidate是候选人的意思,用在软件或者操作系统上就是候选版本

  9. 显示/隐藏Mac隐藏文件

    显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...

  10. NSLog( @"%@", i );

    NSLog( @"%@", i );  %@需要显示对象,所以这个i必须是个对象类型.