多线程下的单例

一、饿汉式

  class Single
  {
    private static final Single s = new Single();
    private Single(){}
    public static Single getInstance()
    {
      return s;
    }
  }

二、懒汉式

方式一:同步函数    

class Single
  {
    private static Single s = null;

    private Single(){}

    public static synchronized Single getInstance()
    {
      if(s==null)
        // -->0 -->1
        s = new Single();

      return s;

    }
  }

  这种方式能够解决线程安全问题,但是效率低,因为多个线程取getInstance得时候,不可避免的每次都需要先去判断一下锁,然后才去判断if(s==null),这样就  降低了效率。

方式二:同步代码块

  加入同步为了解决多线程安全问题。

  加入双重判断是为了解决效率问题。 


  class Single
  {
    private static Single s = null;

    private Single(){}

    public static Single getInstance()
    {
      if(s==null)//只有s==null的时候才会去判断锁,此处是为了效率而生
      {
        synchronized(Single.class) //为了线程的安全
        {
          if(s==null)
          // -->0 -->1
            s = new Single();

        }
      }
      return s;
    }
  }


  class SingleDemo
  {
    public static void main(String[] args)
    {
      System.out.println("Hello World!");
    }
  }

posted @ 2015-07-23 23:52  不将就!  阅读(234)  评论(0编辑  收藏  举报