这个教程写的真好:https://blog.csdn.net/mnb65482/article/details/80458571

1. 什么是单例模式?

  单例模式确保某个类只有一个实例。

  单例类必须自己创建自己的唯一实例。

  单例类要给其他对象提供这一个实例。

2. 为什么需要单例模式?

  保证了一个类仅有一个实例,并且其他类都能够访问到这个实例。

  避免了一个全局访问的类频繁的创建与销毁。

3.单例模式的几种创建方法?

  1)饿汉式(立即加载)

public class T{
private static T sInstancs = new T();
private T(){ }
public static T getInstance(){
return sInstancs;
}
}

  饿汉式单例在类加载初始化时就创建好一个静态的对象供外部使用,除非系统重启,这个对象不会改变,所以本身就是线程安全的。

  2)懒汉式(延迟加载)

public class T{
private static T sInstancs = null;
private T(){ }
public static T getInstance(){
if(sInstancs == null){
sInstancs = new T();
}
return sInstancs;
}
}

  实现了延迟加载,但是在多线程环境下会产生多个单例对象。

  3)双重检验(Double Check Lock)

public class T{
private static T sInstancs = null;
private T(){ }
public static T getInstance(){
if(sInstancs == null){
synchronized (T.class) {
if(sInstancs == null) {
sInstancs = new T();
}
}
}
return sInstancs;
}
}

  保证了线程安全,也比锁住整个方法效率更高。

  4)静态内部类

public class T{
private T(){ }
private static class InstanceHolder{
     //这个instance是private的 说明只能在这个内部类中使用,为什么getInstance()可以调用?
private static T instance = new T();
}
public static T getInstance(){
return InstanceHolder.instance;
}
}

  保证线程安全,也能保证单例的唯一性,也能延迟单例的实例化。静态内部类也有着一个致命的缺点,就是传参的问题,由于是静态内部类的形式去创建单例的,故外部无法传递参数进去。

  所以,我们创建单例时,可以在静态内部类与DCL模式里自己斟酌。

java——单例模式的更多相关文章

  1. 用java单例模式实现面板切换

    1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public class Singleton_ { //设为私有方法,防止被外部类引用或实例 priv ...

  2. 【深入】java 单例模式(转)

    [深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...

  3. 深入Java单例模式(转)

    深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...

  4. Java 单例模式的七种写法

    Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...

  5. java单例模式之懒汉式分析

    转自:http://blog.csdn.net/withiter/article/details/8140338 今天中午闲着没事,就随便写点关于Java单例模式的.其实单例模式实现有很多方法,这里我 ...

  6. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  7. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

  8. 9种Java单例模式详解(推荐)

    单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外 ...

  9. 你真的理解了java单例模式吗?讲别人都忽略的细节!

    前言:老刘这篇文章敢做保证,java的单例模式讲的比大多数的技术博客都要好,讲述别人技术博客都没有的细节!!! 1 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上 ...

  10. Java 单例模式详解

    概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. ...

随机推荐

  1. Selenium二次封装-Java版本

    package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...

  2. NCBI下载SRA数据

    从NCBI下载数据本来是一件很简单的事情,但是今天碰到几个坑: 1.paper里没有提供SRA数据号.也没有提供路径: 2.不知道文件在ftp的地址,不能直接用wget下载 所以通过在NCBI官网,直 ...

  3. debug配置

  4. linux文件夹下载

    1.压缩文件夹 tar cvzf ./chinese.tar.gz /usr/share/fonts/chinese 2.下载 sz chinese.tar.gz

  5. python3-字典的增删改查

    # Auther: Aaron Fan info = { "stull01":"alen zhang", "stull02":"s ...

  6. Redis面试考点

    什么是Redis? Redis 是一个基于内存的高性能key-value数据库. Redis的特点以及缺点? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据 ...

  7. Python入门:模拟登录(二)或注册之requests处理带token请求

    转自http://blog.csdn.net/foryouslgme/article/details/51822209 首先说一下使用Python模拟登录或注册时,对于带token的页面怎么登录注册模 ...

  8. ElementUI的表单和vee-validate结合使用时发生冲突的解决

    在Vue项目中使用ElementUI表单时,同时又引入了vee-validate进行使用的时候,在浏览器上会出现这样的报错: [Vue warn]: The computed property &qu ...

  9. linux 进程间通信机制(IPC机制)- 管道

    一,定义: 管道又可以分为无名管道和命名管道,两者的用途是不一样的. 无名管道PIPE:主要用于具有亲缘关系的进程之间的通信,无名管道的通信是单向的,只能由一段到另外一段:无名管道是临时性的,完成通信 ...

  10. 使用cydia substrate 来进行android native hook

      cydia不仅可以hook java代码,同样可以hook native代码,下面举一个例子来进行android native hook 我是在网上找到的supermathhook这个项目,在他基 ...