Java多线程 发布private对象逸出的演示

文章目录

发布逸出

什么是发布: 把这个对象, 给别的类去使用. (作为参数传递, return对象等情况. )
对象逸出: 对象发布到了不该发布的地方.
如下的情况都是逸出

如下的代码演示了发布逸出的情况 ,定义了一个private对象, 并且用一个public的方法getStates去返回该对象.
在ReleaseEscapeDemo的构造方法中, 给这个map赋初始化的值.
这样的值,在生产环境中 , 可能是一些配置的信息 ,是要提供给其他很多的业务代码去使用的 . 原则上是不允许修改的,
但是在main方法中, 尝试去获得map , 并且去remove掉一个元素.

package com.thread.background;

import java.util.HashMap;
import java.util.Map;

/**
 * 类名称:ReleaseEscapeDemo
 * 类描述:  发布逸出的演示
 *
 * @author: https://javaweixin6.blog.csdn.net/
 * 创建时间:2020/9/1 7:52
 * Version 1.0
 */
public class ReleaseEscapeDemo {
    //定义一个private私有变量
    private Map<String,String> states ;

    public ReleaseEscapeDemo() {
        states = new HashMap<>();
        states.put("1","a");
        states.put("2","b");
        states.put("3","c");

    }

    //对象逸出  返回了一个私有变量
    public Map<String, String> getStates() {
        return states;
    }

    public static void main(String[] args) {
        ReleaseEscapeDemo re = new ReleaseEscapeDemo();
        Map<String, String> states = re.getStates();

        System.out.println(states.get("1"));

        states.remove("1");
        System.out.println(states.get("1"));
    }
}

运行程序后, 控制台打印如下, 说明了成功的获得了值, 并且把map中的值给移除了. 这就是private对象逸出.
会导致其他代码原本要获得key为a的值, 结果却获得不到了

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/108333311
今日推荐