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

  • 相关阅读:
    知识【inline】
    .net实现文件或目录复制到指定目录 及 压缩
    asp实现页面打印功能
    C#创建Windows服务(附服务安装)
    导出合并行及合并列
    Abp添加DBContext
    Background Jobs 调用接口时间长解决
    DataTable去掉空行
    Maven配置
    二维码q
  • 原文地址:https://www.cnblogs.com/byron0918/p/4672130.html
Copyright © 2011-2022 走看看