JDK11-juc 包系列之 atomic 的 AtomicBoolean 类 (一)

本贴最后更新于 1862 天前,其中的信息可能已经事过景迁

11.jpg

第一次看源码,如果有理解不对的地方希望大家可以留下评论谢谢啦。

理解这个类之前需要先理解 java 内存模型


51-63 line

public class AtomicBoolean implements java.io.Serializable {

    private static final long serialVersionUID = 4654671469794556979L;
    private static final VarHandle VALUE;
    static {
        try {
            MethodHandles.Lookup l = MethodHandles.lookup();
            VALUE = l.findVarHandle(AtomicBoolean.class, "value", int.class);
        } catch (ReflectiveOperationException e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    private volatile int value;

上段代码涉及知识点:

1Java9以后新增加并延续到JDK11LTS版本的变量句柄`VarHandle`
2MethodHandles.Lookup
3static{}代码块和内部类
4volatile关键字

1、Java9 以后新增加并延续到 JDK11LTS 版本的变量句柄 VarHandle

VarHandle 是对变量或参数定义的变量系列的动态强类型引用,包括静态字段,非静态字段,数组元素或堆外数据结构的组件。在各种_访问模式_下都支持访问这些变量,包括普通读/写访问,易失性读/写访问以及比较和交换。这样理解:VarHandle利用访问模式可以用来改变AtomicBoolean的值,访问模式控制原子性和一致性属性

访问模式分为以下几类:

MethodHandles.Lookup

从上面代码可以看出,MethodHandles.Lookup 调用其内部的方法产出了 VarHandle 对象。

MethodHandles.Lookup:一个查找对象是用于创建方法处理,当创建需要访问检查的工厂。方法句柄在调用它们时不执行访问检查,而是在创建它们时执行。因此,在创建方法句柄时必须强制执行方法句柄访问限制。强制执行这些限制的调用者类称为查找类

需要创建方法句柄的查找类将调用MethodHandles.lookup为自己创建工厂。当 Lookup 被创建工厂对象,查找类的身份被确定,并安全地存储在 Lookup 对象。然后,查找类(或其委托)可以在 Lookup 对象上使用工厂方法来为访问检查的成员创建方法句柄。这包括允许查找类的所有方法,构造函数和字段,甚至是私有的。简单理解:通过MethodHandles.Lookup反射出某方法/某对象/某成员

查找可能会失败,因为查找类无法访问包含类,或者因为缺少所需的类成员,或者因为查找类无法访问所需的类成员,或者因为查找对象不够信任访问该成员。在任何这些情况下,ReflectiveOperationException 都将从尝试查找中抛出。确切的类将是以下之一:

  • NoSuchMethodException - 如果请求方法但不存在
  • NoSuchFieldException - 如果请求了一个字段但不存在
  • IllegalAccessException - 如果成员存在但访问检查失败

static{}代码块和内部类

当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。java 中静态代码块的用法 static 用法详解

内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种。Java 内部类详解

volatile 关键字

整个类的核心就是 volatile 关键字,它保证了变量在线程只见是可见的。volatile 和 synchronized 的区别

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...