在java并发编程实践-this溢出1中我们已经介绍this溢出的一种情形和解决方案,下面,我们再来还原一下《java并发编程实践》一书中,关于“在构造函数中发布内部类导致this溢出情形以及在构造函数中开启线程的情形”,虽然,该书中已经给出了解决该问题的方案,但是,没有给出具体的出现错误的示例,下面,以一个在构造函数中开启线程的示例来进行说明:

ThisEscapeInner类

public class ThisEscapeInner {public ThisEscapeInner() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 调用ThisEscapeInner类中的方法,内部类具有对外部类this的应用Say();}});// 此时开启线程,可能在调用Say()时会导致不可预见性的结果thread.start();}public void Say() {System.out.println("ThisEscapeInner.Say()");}public static void main(String[] args) {new ThisEscapeSon1();}}

ThisEscapeSon1类

class ThisEscapeSon1 extends ThisEscapeInner {private final String name;public ThisEscapeSon1() {this.name = "Hello Word";System.out.println("ThisEscapeSon1");}public ThisEscapeSon1(String name) {this.name = name;System.out.println("ThisEscapeSon1");}/** 在子类中重写Say方法*/public void Say() {System.out.println("ThisEscapeSon1.Say()-->" + name);}
}

运行结果:可能会打印:ThisEscapeSon1.Say()-->null,也可能会打印ThisEscapeSon1.Say()-->HelloWorld,运行结果具有不确定性,其原因是,start()的线程的执行时序并不是确定的,不知道它是否this.name = "Hello Word";语句执行之前还是之后调度执行。
解决方法:除了使用java并发编程实践-this溢出1上介绍的方法来处理Say()方法,同时,按照《java并发编程实践》中的建议不要在构造函数中开启线程

java并发编程实践-this溢出2相关推荐

  1. [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

    阅读<Java并发编程实践>一书后整理的思维导图.

  2. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  3. Java并发编程实战_一线大厂架构师整理:java并发编程实践教程

    并发编程是Java语言的重要特性之一, 在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序.然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系.因此 ...

  4. java并发编程实践_Java并发编程实践如何正确使用Unsafe

    一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...

  5. java并发编程实践(2)线程安全性

    [0]README 0.0)本文部分文字描述转自:"java并发编程实战", 旨在学习"java并发编程实践(2)线程安全性" 的相关知识: 0.1)几个术语( ...

  6. java并发编程实践(1)intro

    [0]README 0.1)本文部分文字描述转自"java并发编程实践",旨在学习"java并发编程实践(1)intro"的相关知识: [3]线程带来的风险 [ ...

  7. JAVA并发编程实践笔记

    2019独角兽企业重金招聘Python工程师标准>>> JAVA并发编程实践笔记 博客分类: java JAVA并发编程实践笔记 1, 保证线程安全的三种方法:     a, 不要跨 ...

  8. java并发编程实践-带完整书签pdf电子扫描版

    2007年6月由电子工业出版社出版发行,是一本经典的Java并发参考手册.java并发编程实践随着多核处理器的普及,使用并发成为构建高性能应用程序的关键.Java5以及6在开发并发程序中取得了显著的进 ...

  9. 《Java并发编程实践-第一部分》-读书笔记

    大家好,我是烤鸭: <Java并发编程实战-第一部分>-读书笔记. 第一章:介绍 1.1 并发历史: 多个程序在各自的进程中执行,由系统分配资源,如:内存.文件句柄.安全证书.进程间通信方 ...

  10. java并发编程实践 读书笔记_Java - 并发编程实践(读书笔记)

    [注] 同步机制保证:1)原子性 2)内存可见性: Volatile变量只能保证:1)可见性: - 恰当的同步,同步的弱形式,确保对一个变量的更新以可预见的方式告知其他线程. [注] 用锁来协调访问变 ...

最新文章

  1. 使用.NET发送邮件
  2. java B2B2C Springboot电子商务平台源码-Feign 基本使用
  3. avformat_alloc_output_context2 -22错误
  4. 广告基本知识-广告的目的和效果
  5. python怎么输出小数部分_python 输出小数控制
  6. 很好的阻止了事件的发生_请定好您的闹钟,八月,夜空中将发生这13件超酷的天文事件...
  7. 实现strstr库函数功能
  8. JAVA基础学习大全(笔记)
  9. html语言及语法结构,HTML语法结构.ppt
  10. java设计模式 外观,精掌握Java设计模式之外观模式(10)
  11. 【C语言】scanf()输入浮点型数据
  12. android httpClient 支持HTTPS的访问方式
  13. android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)
  14. 敏感词过滤算法Aho-Corasick
  15. 文章整理 - 匠人精神
  16. 通过Unity预编译文件smcs.rsp文件添加预编译命令
  17. 全球顶尖互联网公司谷歌都在使用的Mono-Repo单体仓库
  18. POJ 3345 Bribing FIPA 树上背包
  19. Unity零基础到入门 ☀️| 万字教程 对 Unity 中的 Navigation导航系统基础 全面解析+实战演练【收藏不迷路】
  20. Lucene之Field常用类型

热门文章

  1. 计算机视觉 - 字典学习
  2. 易班显示服务器错误,易班常见问题汇总
  3. ISO12233分辨率测试卡的使用方法
  4. [趣谈网络协议学习] 01 网络分层
  5. 2019大数据分析软件介绍
  6. vue使用a标签下载文件_Vue a标签实现点击下载,下载图片、txt文件,不是直接打开的方式...
  7. steam授权_听歌、看番、学习甚至开车...steam好像忘了自己是个游戏平台
  8. 佳博热敏条码打印机修改ip_佳博打印机修改IP教程.doc
  9. WPS Office 2019政府定制版本 2019.1.15版
  10. Day_02 【Java基础】JDK_1.8的下载安装和环境变量的配置、JDK帮助文档的下载【详细步骤】