集合+单例模式

来源:互联网 发布:网络政治参与缺陷 编辑:程序博客网 时间:2024/06/06 07:13


模式其实就是我们在生活中总结出来的道理,对于这里的单例模式,我们就必须控制在内存中只有一个对象!


通过三部来实现

     1,将构造方法私有化

     2,在类中创建一个本类对象

     3,提供一个方法获取对象


   class   Signle   {       private Signle{}     private    Signle s=new  Signle (); public static void getInstance() { return s; } }同时我们也注意一下其中有“饿汉式”,“懒汉式”饿汉式也就是我们上面写的,  class   Signle   {       private Signle{}          private   Signle s=null; public static void getInstance() {  if(s==null)s=newSignle(); return s; } }主要区别是饿汉式是先初始化的,而懒汉式是需要的时候在初始化。                 记录一下简单的集合,待写....                 Collection<--List<--Vector                  Collection<--List<--ArrayList                  Collection<--List<--LinkedList                  Collection<--Set<--HashSet                  Collection<--Set<--HashSet<--LinkedHashSet                  Collection<--Set<--SortedSet<--TreeSet

其实在实际中常用的还是饿汉式,因为懒汉式对于对我们要处理一些问题,如下:


  class   Signle   {       private Signle{}          private   Signle s=null; public static void getInstance() {  if(s==null)s=newSignle(); return s; } }


用懒汉式时,当有两个线程去操作单例时,有可能A执行到s=new Signle()之前,这时B来了,B又执行因为此时s还是null,这样B又new一个,存在两个对象。


但这怎么去解决?

if(s==null){  synchronized(Signle.class)  {    if(s==null)      s=new Signle();  }}


这里有两个判断主要是为了效率的考虑,当我们不要第一个时,每一次都要判断是否有锁 synchronized。



0 0
原创粉丝点击