Java单例模式怎么利用HashMap实现缓存数据(hashmap,java,开发技术)

时间:2024-05-06 17:35:17 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、单例模式是什么?

单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。Java 里面实现的单例是一个虚拟机的范围,因为装载类的功能是虚拟机的,所以一个虚拟机在通过自己的 ClassLoad 装载实现单例类的时候就会创建一个类的实例。在 Java 语言中,这样的行为能带来两大好处:

1.对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;

2.由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。

因此对于系统的关键组件和被频繁使用的对象,使用单例模式可以有效地改善系统的性能。单例模式的核心在于通过一个接口返回唯一的对象实例。首要的问题就是要把创建实例的权限收回来,让类自身来负责自己类的实例的创建工作,然后由这个类来提供外部可以访问这个类实例的方法

二、单例模式结合HashMap实现缓存

1.测试结果

Java单例模式怎么利用HashMap实现缓存数据

2.代码如下

JavaBean

publicclassPeople{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@OverridepublicStringtoString(){return"People{"+"name='"+name+'\''+",age="+age+'}';}}

缓存工具类

importjava.util.HashMap;importjava.util.Map;publicclassCacheSingletonUtil{privatestaticvolatileCacheSingletonUtilcacheSingletonUtil;privatestaticMap<String,Object>cacheSingletonMap;publicstaticfinalStringPEOPLE_LIST_KEY="peopleList";privateCacheSingletonUtil(){cacheSingletonMap=newHashMap<String,Object>();}/**单例模式有两种类型*懒汉式:在真正需要使用对象时才去创建该单例类对象*饿汉式:在类加载时已经创建好该单例对象,等待被程序使用*///懒汉式单例模式publicstaticCacheSingletonUtilgetInstance(){if(cacheSingletonUtil==null){//线程A和线程B同时看到cacheSingletonUtil=null,如果不为null,则直接返回cacheSingletonUtilsynchronized(CacheSingletonUtil.class){//线程A或线程B获得该锁进行初始化if(cacheSingletonUtil==null){//其中一个线程进入该分支,另外一个线程则不会进入该分支cacheSingletonUtil=newCacheSingletonUtil();}}}returncacheSingletonUtil;}/***添加到内存*/publicvoidaddCacheData(Stringkey,Objectobj){cacheSingletonMap.put(key,obj);}/***从内存中取出*/publicObjectgetCacheData(Stringkey){returncacheSingletonMap.get(key);}/***从内存中清除*/publicvoidremoveCacheData(Stringkey){cacheSingletonMap.remove(key);}}

测试类

importorg.apache.commons.collections.CollectionUtils;importjava.util.ArrayList;importjava.util.List;publicclassCacheSingletonTest{publicstaticvoidmain(String[]args){//测试查询testQuery();}privatestaticvoidtestQuery(){System.out.println("第一次查询开始");query();System.out.println("第一次查询结束");System.out.println("=============");System.out.println("第二次查询开始");query();System.out.println("第二次查询结束");}/**查询数据*/privatestaticList<People>query(){List<People>peopleList=null;List<People>cacheData=(List<People>)CacheSingletonUtil.getInstance().getCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY);if(CollectionUtils.isNotEmpty(cacheData)){System.out.println("从内存中读取");peopleList=cacheData;}else{System.out.println("从数据库中读取");peopleList=getData();//添加到内存中CacheSingletonUtil.getInstance().addCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY,peopleList);}for(Peoplepeople:peopleList){System.out.println("name:"+people.getName()+"age:"+people.getAge());}returnpeopleList;}/**删除数据*/privatevoiddeleteCache(){CacheSingletonUtil.getInstance().removeCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY);}privatestaticList<People>getData(){Peoplep1=newPeople();p1.setName("Jack");p1.setAge(25);Peoplep2=newPeople();p2.setName("Brown");p2.setAge(28);List<People>peopleList=newArrayList<>();peopleList.add(p1);peopleList.add(p2);returnpeopleList;}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Java单例模式怎么利用HashMap实现缓存数据的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:go语言怎么实现屏幕截图下一篇:

12 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18