JUC并发编程 -- final关键字原理 & ASM Bytecode Outline 插件查看Java字节码 & 无状态
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 -- final关键字原理 & ASM Bytecode Outline 插件查看Java字节码 & 无状态相关的知识,希望对你有一定的参考价值。
1. final关键字原理
1.1 设置 final 变量的原理
对于:
public class TestFinal {
final int a = 20;
}
对应的字节码为:
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
发现 final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障(保证在该屏障之前的,对共享变量的改动,都同步到主存当中),保证在其它线程读到它的值时不会出现为 0 的情况
1.2 ASM Bytecode Outline 插件
IDEA安装ASM Bytecode Outline 插件:
安装后重启IDEA
我们随便写一段代码:
对应字节码文件:
2. 无状态
- 在 web 阶段学习时,设计 Servlet 时为了保证其线程安全,都会有这样的建议,不要为 Servlet 设置成员变量,因为这种没有任何成员变量的类是线程安全的
- 因为成员变量保存的数据也可以称为状态信息,因此没有成员变量就称之为【无状态】
以上是关于JUC并发编程 -- final关键字原理 & ASM Bytecode Outline 插件查看Java字节码 & 无状态的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC ReentrantLock -- ReentrantLock原理
JUC并发编程 原理之 volatile -- double-checked locking(简介 & 问题分析 & 问题解决)