zoukankan      html  css  js  c++  java
  • 单例模式懒汉模式多线程时的处理

    package hysys32.danlisheji;

    /**
    * Created by 小管 on 2017/4/2.
    */
    public class danliDemo1 {
    public static void main(String[] args) {

    }
    }

    class Persion {
    //1私有化构造函数,使其无法创造新的对象
        private Persion() {
    }
    //3静态成员只能访问静态对象

    public static Persion p = new Persion();
    //2由于对象无法进行New为了访问其中的成员需要静态

    public static Persion getInstance() {
    return p;
    }
    }


    以下第一个:类加载的时候就有对象
    第二个:类加载的时候,没有 只有getInstance才有对象(延迟加载)

    懒汉式,在多线程中,会遇到如下问题:

    当第一个线程判断S2=null时条件成立,没来得及创建对象,切换到了第二个进程,s2仍然为空,创建了对象,切换到s1继续创建对象,破坏了单例模式的唯一性

    以下代码。只要一个线程把任务创建完毕!后面的线程都无法进入同步代码块!解决了效率问题!减少判断锁的次数。

    package hysys32.danlisheji;
    
    /**
     * Created by 小管 on 2017/4/2.
     */
    public class danliDemo1 {
        public static void main(String[] args) {
    
        }
    }
    
    class Persion {
        private static Persion p = null;
    
        public  static Persion getInstance() {
            if (p==null){
    
            synchronized (Persion.class) {
                if(p==null) {
                    p =new Persion();
    
                }
                return p;
            }
            }
    
        }
    }
    

      

    
    
  • 相关阅读:
    BZOJ 1444 有趣的游戏(AC自动机+矩阵快速幂)
    BZOJ 1190 梦幻岛宝珠(分组01背包)
    BZOJ 1562 变换序列(二分图匹配)
    BZOJ 1483 梦幻布丁(链表+启发式合并)
    BZOJ 1222 产品加工(DP)
    java GUI编程一
    java 网络编程
    java 异常
    java 线程二
    java 线程一
  • 原文地址:https://www.cnblogs.com/hysys32/p/6659561.html
Copyright © 2011-2022 走看看