王学岗单例模式的优化————双重检查、枚举、内部类、容器管理
2017-01-02 20:55
274 查看
第一:双重检查优化,ImageLoader用的就是这种
枚举类实现单例
静态内部类实现单例模式
容器管理
联想:Java服务器连接池
package com.example.shuangchongjiancha; public class Singleton { //线程并发的时候,当我们的变量被修改之后,其他的并发线程及时收到通知,其他的线程就可以访问数据 private volatile static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
枚举类实现单例
package com.example.shuangchongjiancha; public enum Singleton { //该枚举类只有一个对象 instance; }
静态内部类实现单例模式
package com.example.shuangchongjiancha; public class Singleton { private static class SingletonHolder { private static Singleton singleton = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.singleton; } }
容器管理
联想:Java服务器连接池
package com.example.shuangchongjiancha; public class Singleton { }
package com.example.shuangchongjiancha; import java.util.HashMap; public class ObjectManager { private static HashMap<String, Object> hashMap = new HashMap<String, Object>(); private static int MAX_SIZE = 5; private ObjectManager() { } public static Object get(String key) { Object instance = hashMap.get(key); if (instance == null && hashMap.size() < MAX_SIZE) { instance = new Singleton(); hashMap.put(key, instance); } return instance; } public static void put(String key, Object value) { Object instance = hashMap.get(key); if (instance == null && hashMap.size() < MAX_SIZE) { instance = new Singleton(); hashMap.put(key, instance); } } }
package com.example.shuangchongjiancha; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ObjectManager.put("a", "aaa"); ObjectManager.put("b", "aaa"); Object s1=ObjectManager.get("a"); Object s2=ObjectManager.get("b"); //s1和s2不是同一个对象 System.out.println(s1); System.out.println(s2); } }
相关文章推荐
- 【趣解】单例模式之双重锁、内部类、枚举
- 关于双重检查锁定单例模式
- 域模式的管理+硬件保护卡双重管理
- 单例模式中的 双重检查锁定(Double-Check Locking ) (多线程下单例模式中的双重检查锁定的实现)
- 双重检查锁定及单例模式
- 广而告之-双重检查锁定模式
- java中的双重检查模式(double-check idiom)
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式 双重检查锁定失效的原因!!
- 双重检查锁定及单例模式
- Design Pattern_Singleton(单件模式)和Double-Checked Locking(双重检查锁定)
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- 单例模式中的 双重检查锁定(Double-Check Locking ) (多线程下单例模式中的双重检查锁定的实现)
- 双重检查模式单例续(DCL的代替方案)
- Java盲点:双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(13)--- 线程安全接口和双检查加锁优化
- 我的Java开发学习之旅------>Java双重检查锁定及单例模式详解(转)