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;
            }
            }
    
        }
    }
    

      

    
    
  • 相关阅读:
    菜鸟Vue学习笔记(二)
    菜鸟Vue学习笔记(一)
    JVM垃圾回收机制之对象回收算法
    什么是web前端开发?
    JDBC API阐述
    JDBC驱动程序分类
    JDBC理论知识
    冒泡排序(Bubble Sorting)
    Java 中几种常用设计模式
    数据库设计六大范式
  • 原文地址:https://www.cnblogs.com/hysys32/p/6659561.html
Copyright © 2011-2022 走看看