zoukankan      html  css  js  c++  java
  • 两种单例模式(懒汉式,饿汉式)

    懒汉式:

    懒汉式是指,在第一次获取这个类的实例的时候才new这个对象。即可以延迟加载该对象实例。

    懒汉式单例设计模式在多线程同时初始化实例的时候有线程安全问题, 解决的方案是,加同步锁,使用同步方法和同步代码块都能解决问题。 然而多线程每次都访问锁,导致效率低下,所以使用同步代码块,然后以双重判断的形式来解决每次都判断同步锁导致的效率低下问题。

     1 class singleton
     2 {
     3 protected:
     4     singleton()
     5     {
     6         pthread_mutex_init(&mutex);
     7     }
     8 private:
     9     static singleton* p;
    10 public:
    11     static pthread_mutex_t mutex;
    12     static singleton* initance();
    13 };
    14 
    15 pthread_mutex_t singleton::mutex;
    16 singleton* singleton::p = NULL;
    17 singleton* singleton::initance()
    18 {
    19     if (p == NULL)
    20     {
    21         pthread_mutex_lock(&mutex);
    22         if (p == NULL)
    23             p = new singleton();
    24         pthread_mutex_unlock(&mutex);
    25     }
    26     return p;
    27 }

    饿汉式:

    饿汉式是指,在类加载的时候即new出该类对象。

    饿汉式单例模式在类加载时就创建了单例对象,它是线程安全的。

     1 class singleton
     2 {
     3 protected:
     4     singleton()
     5     {}
     6 private:
     7     static singleton* p;
     8 public:
     9     static singleton* initance();
    10 };
    11 singleton* singleton::p = new singleton;
    12 singleton* singleton::initance()
    13 {
    14     return p;
    15 }
  • 相关阅读:
    sql 删除表数据并使ID自增重置
    PHP的常用字符串处理
    一个http请求的详细过程
    elasticsearch7.7-postman-json脚本
    elasticsearch7.7入门三-小试牛刀-批量导入json数据
    elasticsearch7.7入门三-小试牛刀
    elasticsearch7.7入门二-安装
    elasticsearch7.7入门一-介绍
    java8新特性七-Date Time API
    java8新特性五-Stream
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8867584.html
Copyright © 2011-2022 走看看