zoukankan      html  css  js  c++  java
  • 单例模式中的多线程安全问题分析

    单例模式中的多线程安全问题分析

    2018年04月23日 22:17:31 luowei201711 阅读数 55

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/luowei201711/article/details/80057528

    package thread2;
    
    public class SingleTonDemo {
    
        public static void main(String[] args) {
            SingleTon single = SingleTon.getSingle();
            SingleTon single1 = SingleTon.getSingle();
            System.out.println(single1.equals(single));
        }
    }
    
    
    package thread2;
    
    
    /* 单例设计模式:一个类只允许一个对象存在
    
    * 分析:(1)构造函数私有化,不让外界创建该类的对象
    
    * (2) 既然不让外界去创建,那么就应该在本类中提供该类的对象
    
    * 懒汉式:
    
    * 延时加载
    
    * 饿汉式:
    
    */
    
    public class SingleTon {
    
    private SingleTon() {
    
    };
    
    private static SingleTon single = null;
    
    public static SingleTon getSingle() {
    
    if (single == null) {
    
    synchronized (SingleTon.class) { //该类的字节码对象作为同步代码块的锁
    
    if (single == null) {
    
    // 加了同步后,不会出现多个线程在此处发生阻塞
    
    single = new SingleTon();
    
    }
    
    }
    
    }
    
    return single; //single!=null时,直接返回,降低同步代码块的判断次数
    
    }
    
    }
    
    /*
    
    *问题:
    
    *当多个线程共同访问getSingle()时,会出现安全问题,假设线程A,B同时在if判断后发生阻塞,恢复正常后,AB都会执行single = newSingleTon(),此时内存中会存在两个对象
    
    *怎么解决?
    
    *添加同步代码块
  • 相关阅读:
    PCI总线原理(二)
    smbus协议
    PCI总线原理(一)
    计算机术语中关于 Assert 和Deassert 词汇意思
    用安全存储器实现FPGA的身份识别及防拷贝
    主板结构
    qt 雅黑字体
    PCIExpress总线简介
    PHY管理接口(MDIO)
    PCI总线原理(三)
  • 原文地址:https://www.cnblogs.com/grj001/p/12223986.html
Copyright © 2011-2022 走看看