文章目录

  • 解决private对象逸出--返回副本

解决private对象逸出–返回副本

如下的代码, 使用的是返回对象的副本的方式, 来解决private对象逸出

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;}/*** 返回对象的副本* @return*/public Map<String, String> getStatesCopy() {return new HashMap<>(states);}public static void main(String[] args) {ReleaseEscapeDemo re = new ReleaseEscapeDemo();System.out.println(re.getStatesCopy().get("1"));re.getStatesCopy().remove("1");System.out.println(re.getStatesCopy().get("1"));}
}

其关键的代码如下 , 新建立一个getStatesCopy方法, 里面返回一个new hashmap. 并且这个map 的构造 直接传入private的map . 相当于把private的map赋值给了新的map .
这样别的线程获取这个private的map的时候, 即使改了map 的值, 也只是该的new的map 的值, 而没有改private的map 的值.

测试的代码如下, 此处调用了三次getStatesCopy方法, 实际上是获取的三个map.
因此即使remove掉了key为1的元素, 再次获取也能拿得到
. 所以控制台打印了两个1

Java多线程 解决private对象逸出--返回副本相关推荐

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

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

  2. Java内存模型:线程并发下的对象逸出

    Java内存模型:线程并发下的对象逸出原因分析及解决方案:

  3. java火箭应用_从火箭发场景来学习Java多线程并发闭锁对象

    原标题:从火箭发场景来学习Java多线程并发闭锁对象 从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; ...

  4. java 闭锁_从火箭发场景来学习Java多线程并发闭锁对象

    从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size-这种方式来实现.但是在多线程并发的情 ...

  5. java多线程解决应用挂死的问题

    java多线程解决应用挂死的问题 参考文章: (1)java多线程解决应用挂死的问题 (2)https://www.cnblogs.com/hushaojun/p/4323808.html (3)ht ...

  6. JAVA多线程解决哲学家问题(GUI演示)

    利用JAVA多线程与Swing编程制作GUI演示哲学家问题解决 感谢出现在GUI中的我以及我的四位室友并且感谢他们为我的程序设计提供一部分灵感让该演示显得不那么单调. 问题描述: 由Dijkstra提 ...

  7. Java并发编程——this引用逸出(this Escape)

    http://blog.csdn.net/flysqrlboy/article/details/10607295       并发编程实践中,this引用逃逸("this"esca ...

  8. Java 技术篇-借助自定义对象实现函数返回多个不同类型的值实例演示

    定义了个 Result 类,里面设置了多种不同类型的属性. 后面函数只要把想返回的值存储在 Result 对象里再返回这个对象,就可以实现函数返回多个不同类型的值的需求了. package com.t ...

  9. java多线程访问beans对象_springboot在多线程中注入对象

    springboot多线程,线程类无法实现自动注入需要的bean,可以通过工具类获取需要的bean @Component public class ApplicationContextProvider ...

最新文章

  1. 将Unreal4打包后的工程嵌入到Qt或者桌面中
  2. 编译成功但链接失败的原因
  3. .NET实时2D渲染入门·动态时钟
  4. 1095. 山脉数组中查找目标值
  5. c语言表达式10 3的结果是,C语言程序设计--第3讲运算符与表达式.ppt
  6. azure创建centos_使用Azure Power BI创建Azure数据仓库报告
  7. hdu4000 amp;amp; hrbust1625
  8. Matlab的最优化实现方法之线性规划:linprog
  9. paip.常用汉字形声字大全3500字
  10. 米思齐(Mixly)图形化系列教程(三)-变量
  11. audio realtek 耳机没声_解决HD Audio 声卡前面板耳机无声音的方法
  12. AI英雄 | 揭秘李飞飞离职谷歌前后
  13. VS2015 还是VS2017 好用_强烈推荐:2020年12款Visual Studio 好用的工具
  14. B端大数据量查询优化方案
  15. 简单的图像几何校正实践
  16. 使用windows引导的ubuntu双操作系统
  17. Ubuntu 16.04 修改软件更新源地址
  18. (基础)详解Python实现图像分割增强的两种方法
  19. 不要用思维来改变和扭曲自己
  20. db4o面向对象数据库::NoSQL

热门文章

  1. 陈南峰质量讲堂6 | 数字化质量管理系统QMS
  2. 使用MATLAB遍历文件
  3. mysql ansi nulls_SQL学习笔记之ANSI_NULLS
  4. 全球及中国反射全息光栅行业发展态势及前景动态预测报告*2022-2027
  5. 实验报告一——网络侦查与网络扫描
  6. 拟牛顿法(DFP、BFGS、L-BFGS)
  7. jmeter设置参数的方法(随机,读csv等)
  8. 介绍各个PHP版本一些特性知识点
  9. matlab手写字母识别,一种基于MATLAB的手写字母的神经网络识别方法
  10. 检测PCB板上的网络变压器耐压特性的正确方法