Mod tunggal ialah mod penciptaan objek yang digunakan untuk menjana tika tertentu objek Ia boleh memastikan bahawa kelas dalam sistem hanya menjana satu tika. Singleton yang dilaksanakan dalam Java adalah dalam skop mesin maya Oleh kerana fungsi memuatkan kelas adalah milik mesin maya, mesin maya akan mencipta contoh kelas apabila ia memuatkan kelas tunggal melalui ClassLoadnya sendiri. Dalam bahasa Java, tingkah laku sedemikian boleh membawa dua faedah utama:
1 Untuk objek yang kerap digunakan, masa yang dihabiskan untuk mencipta objek boleh diabaikan, yang sangat besar untuk objek berat itu
2. Apabila bilangan operasi baharu dikurangkan, kekerapan penggunaan memori sistem juga akan dikurangkan, yang akan mengurangkan tekanan GC dan memendekkan masa jeda GC.
Oleh itu, untuk komponen utama sistem dan objek yang kerap digunakan, menggunakan corak tunggal boleh meningkatkan prestasi sistem dengan berkesan. Teras corak tunggal adalah untuk mengembalikan contoh objek unik melalui antara muka. Masalah pertama adalah untuk mengambil semula kebenaran untuk membuat contoh, biarkan kelas itu sendiri bertanggungjawab untuk penciptaan contoh kelasnya sendiri, dan kemudian biarkan kelas ini menyediakan kaedah luaran untuk mengakses tika kelas ini
1 Keputusan ujian
2
JavaBean
public class People { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "People{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Kelas alat cache
import java.util.HashMap; import java.util.Map; public class CacheSingletonUtil { private static volatile CacheSingletonUtil cacheSingletonUtil; private static Map<String,Object> cacheSingletonMap; public static final String PEOPLE_LIST_KEY = "peopleList"; private CacheSingletonUtil(){ cacheSingletonMap = new HashMap<String, Object>(); } /* * 单例模式有两种类型 * 懒汉式:在真正需要使用对象时才去创建该单例类对象 * 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用 */ // 懒汉式单例模式 public static CacheSingletonUtil getInstance(){ if (cacheSingletonUtil == null){// 线程A和线程B同时看到cacheSingletonUtil = null,如果不为null,则直接返回cacheSingletonUtil synchronized (CacheSingletonUtil.class) {// 线程A或线程B获得该锁进行初始化 if (cacheSingletonUtil == null) {// 其中一个线程进入该分支,另外一个线程则不会进入该分支 cacheSingletonUtil = new CacheSingletonUtil(); } } } return cacheSingletonUtil; } /** * 添加到内存 */ public void addCacheData(String key,Object obj){ cacheSingletonMap.put(key,obj); } /** * 从内存中取出 */ public Object getCacheData(String key){ return cacheSingletonMap.get(key); } /** * 从内存中清除 */ public void removeCacheData(String key){ cacheSingletonMap.remove(key); } }
Kelas ujian
import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.List; public class CacheSingletonTest { public static void main(String[] args) { //测试查询 testQuery(); } private static void testQuery () { System.out.println("第一次查询开始"); query(); System.out.println("第一次查询结束"); System.out.println("============="); System.out.println("第二次查询开始"); query(); System.out.println("第二次查询结束"); } /* * 查询数据 */ private static List<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 (People people : peopleList) { System.out.println("name : " + people.getName() + " age : " + people.getAge()); } return peopleList; } /* * 删除数据 */ private void deleteCache () { CacheSingletonUtil.getInstance().removeCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY); } private static List<People> getData() { People p1 = new People(); p1.setName("Jack"); p1.setAge(25); People p2 = new People(); p2.setName("Brown"); p2.setAge(28); List<People> peopleList = new ArrayList<>(); peopleList.add(p1); peopleList.add(p2); return peopleList; } }
Atas ialah kandungan terperinci Cara menggunakan HashMap untuk cache data dalam mod tunggal Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!