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;
    }
    }

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

  • 相关阅读:
    破圈法求最小生成树+最小生成树与最短路径问题
    相信你们的锐意前行,终将成就更美好的未来
    “基于模块化自动驾驶底盘的PIX移动空间”发布
    Node:通过 Uglify 压缩小程序代码
    CSS 实用技巧
    websercie调用方式
    IDEA 添加tomcat启动后控制台乱码解决方案
    对象转json串,json转对象
    js 判断一个变量是数组还是对象
    @Transactional 锁表吗?关于Spring注解@Transactional和SQL for update 的一些观点
  • 原文地址:https://www.cnblogs.com/zhangxiya/p/15394317.html
Copyright © 2011-2022 走看看