首先抛出问题 - “这段程序的运行结果是什么”
  
  

  原因分析

  而Integer.valueOf每次是返回一个新的Integer对象,所以,我们的synchronized实际上没有起到你预想中的效果。
  我是如何发现这个实现内幕的呢?
  1、 分析编译后的MyRunnable.class文件,发现 i++ 在虚拟机中的执行原理。
  通过jdk自带的javap命令工具,对 MyRunnable.class 进行分析
  

  这个逻辑,通过代码表达出来就是这句“i = Integer.valueOf(i.intValue() + 1);”
  2、 查看Integer的源码,发现 Integer.valueOf 每次都是新对象。
  
  真相大白了,你懂了嘛? 可以分享出去让更多人知道。
  在学习JAVA的过程中,我真正体会到了系统性学习的重要性,现在我每个月都有学习目标,不再像以前那样,看到什么就学什么了,这样做让我明显感觉到了自己的提升。

Leave a Reply

Your email address will not be published. Required fields are marked *

one × 4 =