• (一)单例模式


    一、简单单例模式

    所谓单例模式,就是在整个应用中保证只有一个类的实例存在。就像是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的实例,单例失败。
  • 相关阅读:
    Java-->实现断点续传(下载)
    Java-->分割文件
    Java-->IO流模拟实现用户登录以及登录信息
    Java-->PrintStream
    Java-->一个只能运行十次的程序
    MySQL之数据类型
    【linux相识相知】网络属性配置
    MySQL之基本语句
    【linux相识相知】sed命令
    【Linux相识相知】yum的配置使用和程序包的编译安装
  • 原文地址:https://www.cnblogs.com/shyroke/p/8917226.html
Copyright © 2020-2023  润新知