zoukankan      html  css  js  c++  java
  • (一)单例模式

    一、简单单例模式

    所谓单例模式,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。

    最简单的实现就是,把类的构造方法设为private,从而保证其他类无法直接new出实例。然后在该类中提供一个静态的实例返回给调用者,这样就可以保证只有一个实例。

    package 单例模式;
    
    /**
     * Created by shyroke on 2018/4/23.
     */
    public class SingleTon {
    
        private static SingleTon newInstance = null;
    
        private SingleTon(){}
    
        public static SingleTon newInstance(){
    
            if(newInstance ==  null){
                newInstance = new SingleTon();
            }
            return newInstance;
        }
    
    
        public static void main(String[] args) {
            SingleTon s1 = SingleTon.newInstance();
            SingleTon s2 = SingleTon.newInstance();
            System.out.println(s1);
            System.out.println(s2);
        }
    }

    结果如下图,引用地址一样,说明是同一个对象。

    二、多线程版的单例

    • 上个例子在并发中是有问题的。
    • 线程A调用newInstance方法,因为是第一次调用,所以newInstance =null.线程A开始创建newInstance 的实例,此时线程B开始执行,这个时候线程A还没实例化newInstance ,此时的newInstance 仍然为null,
    • 所以线程B也开始创建newInstance 的实例,这样一来线程A和线程B都创建了newInstance的实例,单例失败。
  • 相关阅读:
    Requests接口测试(五)
    Requests接口测试(四)
    Requests接口测试(一)
    软件测试杂谈(学习思路、学习方法、面试技巧、后期发展、职业规划等)
    Requests接口测试(三)
    Requests接口测试(二)
    Python基础入门-列表解析式
    Python基础入门-集合
    Jmeter接口测试-完成任务API
    Jmeter接口测试-基于nodejs的to do list项目说明
  • 原文地址:https://www.cnblogs.com/shyroke/p/8917226.html
Copyright © 2011-2022 走看看