王学岗单例模式的优化————双重检查、枚举、内部类、容器管理

原创 2017年01月02日 20:55:57

第一:双重检查优化,ImageLoader用的就是这种

这里写图片描述

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);
    }
}

双重检查锁定原理详解

双重检查锁定与延迟初始化 在java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需...
  • li295214001
  • li295214001
  • 2015年08月31日 16:50
  • 6485

“双重检验锁失效”的问题说明

双重检验锁是一个高效的懒加载方法,被广泛引用或应用于多线程环境中。但是,在Java中,如果没有额外的同步,它并不能以独立的方式可靠地工作。当在其它语言上时,比如C++,它依赖于处理器的内存模型,编译器...
  • zhanlanmg
  • zhanlanmg
  • 2015年11月20日 11:33
  • 1790

双重检查锁定(double-checked locking)与单例模式

单例模式有如下实现方式:package com.zzj.pattern.singleton; public class Singleton { private static Singleton i...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2015年01月13日 12:11
  • 5529

Java单例模式中双重检查锁的问题

单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年06月17日 19:16
  • 18514

双重检查加锁单例模式

双重检查加锁单例模式为什么失效,多线程下怎样实现安全的单例模式。了解Java内存模型,同步的语义...
  • u013673976
  • u013673976
  • 2015年02月14日 20:15
  • 1302

C++和双重检查锁定模式(DCLP)的风险(转)

多线程其实就是指两个任务一前一后或者同时发生。 1 简介 当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时...
  • tantexian
  • tantexian
  • 2016年02月18日 11:04
  • 1092

单例模式的双重检测

最近学习多线程 发现提到一个单例模式的l检测研究了一下确实发现很麻烦 写下来以备后用 1、饿汉式单例模式 所谓饿汉式就是不管原来有没有上来就新创建一个 不管肚子里面有没有先吃一个再说 public...
  • majun_guang
  • majun_guang
  • 2015年03月25日 23:37
  • 1606

JAVA 单例双重检查(double check)为什么不好用

JAVA 单例双重检查(double check)为什么不好用 在阅读之前,请先了解下线程并发涉及到的三个概念:原子性、可见性、有序性,可以看下这篇文章:http://www.cnblogs.co...
  • anjxue
  • anjxue
  • 2016年04月01日 17:28
  • 1329

单例模式中用volatile和synchronized来满足双重检查锁机制

例子1:没有volatile修饰的uniqueInstance public class Singleton { private static Singleton uniqueInsta...
  • crazy_yyyyy
  • crazy_yyyyy
  • 2016年09月05日 17:59
  • 849

【发展】从技术岗位走向管理岗位的困惑与经历 ...

最近和一好友小聚,三杯淡茶入口,一番小叙之后,好友突然一声长叹,忙问其缘由,好友道:“原本一直在公司做技术岗位,半年前,幸得领导赏识,得一部门经理美差,开始还洋洋得意,可半年做下来,还真是一把心酸泪呀...
  • zhangling61130
  • zhangling61130
  • 2014年09月16日 15:34
  • 1234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王学岗单例模式的优化————双重检查、枚举、内部类、容器管理
举报原因:
原因补充:

(最多只允许输入30个字)