zoukankan      html  css  js  c++  java
  • 单例模式- 实现方式

    单例模式是基础设计模式之一

    单例模式定义:

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

    单例模式特点:

    1、单例类只能有一个实例。

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

    3、单例类必须给所有其他对象提供这一实例。

    单例模式:分饱汉式单例和饿汉式单例

    饱汉式单例

    public class  enumTest {
    private final static enumTest enumTest = new enumTest();
    private enumTest(){}

    /**
    * 饿汉式,类加载完成实例化,避免线程同步
    * @return
    */
    public static enumTest getInstance(){
    return enumTest;
    }
    }



    饿汉式单例:
    public class Test {
    private static Test test;
    private Test(){ }

    /**
    * 懒汉式 线程不安全(只能单线程使用,多线程,一个线程进入判断语句块,未来得及往下执行,另一线程也通过此判断语句,产生多个实例)
    *
    * @return
    */
    public static Test getInstance(){
    if(test == null) {
    test = new Test();
    }
    return test;

    }


    /**
    * 线程安全 懒汉式
    * 缺点:效率低 每个线程在想获得类的实例时候,执行此方法 都要进行同步
    * @return
    */
    public static synchronized Test getInstance1(){
    if(test == null){
    test = new Test();
    }
    return test;
    }



    /**
    * 双重检查 懒汉式(推荐使用)
    * 优点:线程安全,延迟加载,效率较高
    * @return
    */
    public static Test getInstance2(){
    if(test == null){
    synchronized(Test.class){
    if(test ==null){
    test = new Test();
    }
    }
    test = new Test();
    }
    return test;
    }
    }

    综上所述,推荐使用双重检查懒汉式单例模式 或 饱汉式单例模式(其实对内存的影响可以忽略不计)

  • 相关阅读:
    pass cloudcc
    eclipse生成javaDoc时,出现"编码GBK 的不可映射字符"
    tabWidget 直布局
    用 Navicat for Oracle 管理 Oracle10g/11g 数据库
    Aspx页面内 成员变量丢失的问题
    AspNet2.0页面生命周期
    【Z】浅析豆瓣的 Google Analytics 应用
    绑定SqlDataSource的Gridview字符串字段长度截取(转)
    Java web 推荐书籍
    关于Reapeter的总结
  • 原文地址:https://www.cnblogs.com/zhangxiya/p/15394317.html
Copyright © 2011-2022 走看看