zoukankan      html  css  js  c++  java
  • 多线程下的单例

    一、饿汉式

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

  • 相关阅读:
    python实现满二叉树递归循环
    二叉树遍历规则,先顺遍历/中序遍历/后序遍历
    满二叉树的循环递归
    python 中的super()继承,搜索广度为先
    UITableview 中获取非选中的cell
    iOS——UIButton响应传参数
    iOS- iPad UIPopoverController
    IPAD之分割视图 SplitViewController
    IOS7 隐藏状态栏
    iOS 强制横屏
  • 原文地址:https://www.cnblogs.com/byron0918/p/4672130.html
Copyright © 2011-2022 走看看