JAVA中单例与多例的实现
2016-07-24 00:29
429 查看
这是几天的学习自己总结下来的一些关于自己对单例和多例的想法。。。。。。(不能与大神的理解相提并论
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
)
单例的第一种
单例的第二种
第二种并不需要加上线程锁,,因为在最开始的第一个就new了对象,其余直接给对象不会开新的对象
多例的第一种
多例的第二种
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
)
单例的第一种
/*懒汉式*/ public class Single { private static Single s=null; private Single(){//封装构造函数 } public synchronized static Single getInstance(){//设置模板锁---控制好每一个拿到的都是同一个 这样在多线程可以保证每一个线程拿到的对象都是同一个对象 if(s==null){ s = new Single(); } return s; } }
单例的第二种
/*恶汉式*/ public class Single2 { private final static Single2 s=new Single2(); private Single2(){ } public static Single2 getInstance(){ return s; } }
第二种并不需要加上线程锁,,因为在最开始的第一个就new了对象,其余直接给对象不会开新的对象
多例的第一种
import java.util.HashMap; import java.util.Map; public class A { private static Map<String, A>map= new HashMap<String, A>(); public static A getInstance(String key){ //到容器(缓存)中去查找key所对应的对象,如果没有,那么就new一个放到容器中 A a = map.get(key); if(a==null){ map.put(key, a); } return a; } }
多例的第二种
import java.util.HashMap; import java.util.Map; public class AA { private static Map<Integer, AA>map= new HashMap<Integer, AA>(); private static int count=3;//控制缓存中实例的总数(该整数可以采用用户设置或读取配置文件的方式更改) private static int num=1;//当前实例的序号----用num来当作内部维护的key public static AA getInstance(String key){ AA a = map.get(num); if(a==null){ a = new AA(); map.put(num, a); } num++; if(num>count){ num=1; } return a; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序