线程安全单例模式的几种实现方式

电脑杂谈  发布时间:2020-07-11 23:18:05  来源:网络整理

单例模式 线程安全_写一个线程安全的单例模式_多线程调用单例类中的方法会不会造成线程安全问题?

单例模式是常见的设计模式之一: 目的是节省内存并限制实例数;这对Java GC回收机制很有帮助.

单例模型的三个好处:

1. 控制资源的使用写一个线程安全的单例模式,并通过线程同步控制资源的并发访问

2. 控制生成实例的数量以节省资源

3. 用作通信介质,以允许两个不相关的进程和线程进行通信而无需建立连接

单例模式分类: 饥饿模式(在加载类时将创建对象);

多线程调用单例类中的方法会不会造成线程安全问题?_写一个线程安全的单例模式_单例模式 线程安全

Slacker模式(仅在首次请求实例时创建实例);

注册模式

单例模式功能:

1. 单例类只有一个实例

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

3. Singleton类必须将此实例本身提供给其他类

单例模式 线程安全_写一个线程安全的单例模式_多线程调用单例类中的方法会不会造成线程安全问题?

1. 惰性模式: 类加载时将不会初始化,并且在首次从外部请求实例时将创建该实例;并且实例将不会在第一次创建后创建;

特征: 在运行时获取对象的速度较慢,但​​在加载时速度更快,并且在应用程序的整个生命周期中仅占用一部分资源

//单例模式-懒汉式单例
public class LazySingleton {
     //私有静态对象,加载时候不做初始化
     private static LazySingleton jjy=null;
     // 私有构造方法,避免外部创建实例
     private LazySingleton(){}
     /**
      * 静态工厂方法,返回此类的唯一实例. 
      * 当发现实例没有初始化的时候,才初始化.
      * @return LazySingleton
      */
     synchronized public static LazySingleton getJjy(){
         if(jjy==null){
             jjy=new LazySingleton();
         }
         return jjy;
     }
}

2. 饿模式: 加载类时将初始化该类,并创建一个实例;

功能: 在运行时获取对象相对较快,但是在加载缓慢时,它将始终占用资源(程序打开和加载缓慢,但是运行速度较快-从用户体验的角度来看,建议用于饥饿的人)<

//单例模式-饿汉式单例

写一个线程安全的单例模式_多线程调用单例类中的方法会不会造成线程安全问题?_单例模式 线程安全

公共类EagerSingleton {

//私有静态对象,加载时不初始化

私有静态EagerSingleton jjy = new EagerSingleton();

//避免在外部创建实例的私有构造方法

私人EagerSingleton(){}

/ **

多线程调用单例类中的方法会不会造成线程安全问题?_单例模式 线程安全_写一个线程安全的单例模式

*静态工厂方法写一个线程安全的单例模式,该方法返回此类的唯一实例.

*

*

* /

同步的公共静态EagerSingleton getJjy(){

返回jjy;

}

}

 

使用场景: 连接池;网站柜台;


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-277000-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 钱洪江
        钱洪江

        我想知道咱们南海造岛停止了么

        • 张慧锦
          张慧锦

          豆浆精之类都是以不含防腐剂

      • 谭维维
        谭维维

        允许同志结婚倒是不错的见解

      • 元础
        元础

        弄僵后反而弊大于利

      热点图片
      拼命载入中...