博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:6721 次
发布时间:2019-06-25

本文共 2380 字,大约阅读时间需要 7 分钟。

懒汉:

public class Singleton{             // 因为这个变量要在静态方法中使用,所以需要加上static修饰         private static Singleton instance = null;       //私有化构造器,好在内部控制创建实例的数目       private Singleton(){          }          //这个方法要定义成类方法       public static Singleton getInstance(){                       if( instance == null ){                     instance = new Singleton();             }                     return instance;         }}

 

饿汉

public class Singleton {        private static Singleton instance = new Singleton();        pirvate Singleton(){       }         public static Singleton getInstance(){                             return instance;       }      }

  单例模式中“懒汉”实现了缓存的思想

 

在java中缓存的基本实现:

public class JavaCache {/*** 缓存数据的容器,定义成Map是方便访问,直接根据Key就可以获取Value了 key选用String是为了简单*/private Map
map = new HashMap
();/*** 从缓存中获取值* * @param key* 设置时候的key值* @return key对应的Value值*/public Object getValue(String key) {// 先从缓存里面取值Object obj = map.get(key);// 判断缓存里面是否有值if (obj == null) { // 如果没有,那么就去获取相应的数据,比如读取数据库或者文件 // 这里只是演示,所以直接写个假的值 obj = key + ",value"; // 把获取的值设置回到缓存里面 map.put(key, obj); } // 如果有值了,就直接返回使用 return obj; }}

  利用缓存来实现单例模式

public class Singleton{         //定义一个默认的key值,用来表示在缓存中的存放        private  final static  String DFAULT_KEY = "one";              //缓存实例的容器       private static Map
map = new HashMap
<(); private Singleton(){ } public class Singleton getInstance(){ //先从缓存中获取 Singleton insatce = map.get(DFAULT_KEY); if( instance == null ){ instance = new Singleton(); map.put(DFAULT_KEY , instance); } }}

线程安全:

         1 不在同步的懒汉式线程不安全的

         2 饿汉是安全的

 

改造:

       同时实现延迟加载也实现线程安全

    基础知识:

  

            解决方案的思路:

         实现:

   

public class Singleton{          //类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例没有绑定关系,而且只有别调用到的时候才会装载,从而实现了延迟加载         private static class SingletonHolder{                //静态初始化器,由JVM来保证线程安全                private static Singleton isntance = new Singleton();                                       }           private Singleton(){                 }                public static Singleton getInstance(){                           return SingletonHolder.instance;                  }          }

  

 

转载地址:http://ujcmo.baihongyu.com/

你可能感兴趣的文章
转:最小区间:k个有序的数组,找到最小区间使k个数组中每个数组至少有一个数在区间中...
查看>>
LeetCode:Word Search
查看>>
DAY2-j打卡第二天2018-1-10
查看>>
2017-2018-2 20179209《网络攻防》第七周作业
查看>>
JavaScript--------从理解这些图开始
查看>>
问题-
查看>>
抽取vs2010安装包中vc++ runtime
查看>>
浅谈Vue之双向绑定
查看>>
hibernate简单入门教程(五)---------检索策略
查看>>
jqgrid查找
查看>>
mysql中,查看当前数据库下所有的基表,不包括视图
查看>>
Android density、dpi、dp、px
查看>>
初识JAVA中的泛型概念
查看>>
Pitch,Yaw,Roll的概念
查看>>
Texture tiling and swizzling
查看>>
IOS 真机调试 报错 图片资源 不存在 原因
查看>>
部署NTP服务器进行时间同步
查看>>
Codeforces Round 97B 点分治
查看>>
Candy
查看>>
dN/dS与分子进化常用软件
查看>>