当前位置:   article > 正文

JUC并发编程 共享模型之不可变 不可变设计 -- final关键字原理 & ASM Bytecode Outline 插件查看Java字节码 & 无状态

asm bytecode outline

1. final关键字原理


1.1 设置 final 变量的原理

对于:

public class TestFinal {
 final int a = 20; 
 }
  • 1
  • 2
  • 3

对应的字节码为:

0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: bipush 20
7: putfield #2 // Field a:I
 <-- 写屏障
10: return
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

发现 final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障(保证在该屏障之前的,对共享变量的改动,都同步到主存当中),保证在其它线程读到它的值时不会出现为 0 的情况


1.2 ASM Bytecode Outline 插件

IDEA安装ASM Bytecode Outline 插件:在这里插入图片描述

安装后重启IDEA
在这里插入图片描述

我们随便写一段代码:

在这里插入图片描述
在这里插入图片描述

对应字节码文件:

在这里插入图片描述


2. 无状态

  • 在 web 阶段学习时,设计 Servlet 时为了保证其线程安全,都会有这样的建议,不要为 Servlet 设置成员变量,因为这种没有任何成员变量的类是线程安全的
  • 因为成员变量保存的数据也可以称为状态信息,因此没有成员变量就称之为【无状态】


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/224169
推荐阅读
相关标签
  

闽ICP备14008679号