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

  • 相关阅读:
    vue 当前页跳转并强制刷新
    (转)vue项目刷新当前页面
    查询sqlserver中表信息
    (转) 自旋锁和互斥锁
    Web API 自定义文件内容的定制类
    (转)缓存
    (转) redis的事务和watch
    ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
    (转) 分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践
    php项目权限系统设计
  • 原文地址:https://www.cnblogs.com/byron0918/p/4672130.html
Copyright © 2011-2022 走看看