• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
java从入门到放QI
储小贱的个人博客~
博客园    首页    新随笔    联系   管理    订阅  订阅

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

单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数;有利于java GC回收机制。

  

  单例模式的三个好处:

    1.控制资源的使用,通过线程同步来控制资源的并发访问

    2.控制实例的产生个数,来达到节约资源的目的

    3.作为通信媒介使用,在不建立连接的情况下,让两个不先关的进程和线程之间实现通信

 

单例模式分类: 饿汉模式(在类加载时便会创建对象);

        懒汉模式(在外部第一次请求实例时才会创建实例);

        登记式模式

 

单例模式特点:

    1.单例类只有一个实例

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

    3.单例类必须自己给其他类提供这一实例

 

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.饿汉模式:类加载时就会初始化,创建实例;

      特点是:运行时获取对象速度比较快,但加载时速度比较慢,会一直占用资源  (程序打开加载比较慢,但运行速度快---从用户体验角度来说推荐饿汉)

//单例模式-饿汉式单例
public class EagerSingleton {
//私有静态对象,加载时候不做初始化
private static EagerSingleton jjy=new EagerSingleton();
// 私有构造方法,避免外部创建实例
private EagerSingleton(){}

/**
* 静态工厂方法,返回此类的唯一实例.
* 
*
*/
synchronized public static EagerSingleton getJjy(){

return jjy;
}
}

 

 

 使用场景:数据库连接池;网站计数器;

 

posted @ 2018-04-21 13:47  java从入门到放QI  阅读(4040)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3