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并发编程线程池及相关面试题 详解

JUC并发编程 共享模式之工具 JUC ReentrantLock -- ReentrantLock原理

多线程的实现原理

JUC 高并发编程

JUC并发编程 原理之 volatile -- double-checked locking(简介 & 问题分析 & 问题解决)