ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA中枚举如何保证线程安全

2021-02-25 15:34:01  阅读:198  来源: 互联网

标签:JAVA APPLE final 枚举 线程 new ORANGE static public


枚举类型到底是什么类呢?是enum吗?明显不是,enum就和class一样,只是一个关键字,他并不是一个类,那么枚举是由什么类维护的呢,首先写一个简单的枚举

public enum T {
    APPLE,BANANA,ORANGE;
}
  • 使用反编译查看源码:
public final class T extends Enum
{
    private T(String s, int i)
    {
        super(s, i);
    }
    public static T[] values()
    {
        T at[];
        int i;
        T at1[];
        System.arraycopy(at = ENUM$VALUES, 0, at1 = new T[i = at.length], 0, i);
        return at1;
    }

    public static T valueOf(String s)
    {
        return (T)Enum.valueOf(demo/T, s);
    }

    public static final T APPLE;
    public static final T BANANA;
    public static final T ORANGE;
    private static final T ENUM$VALUES[];
    static
    {
        APPLE = new T("APPLE", 0);
        BANANA = new T("BANANA", 1);
        ORANGE = new T("ORANGE", 2);
        ENUM$VALUES = (new T[] {
            APPLE, BANANA, ORANGE
        });
    }
}

通过反编译后代码我们可以看到,public final class T extends Enum,说明,该类是继承了Enum类的,同时final关键字告诉我们,这个类也是不能被继承的。当我们使用enmu来定义一个枚举类型的时候,编译器会自动帮我们创建一个final类型的类继承Enum类,所以枚举类型不能被继承,我们看到这个类中有几个属性和方法。

  • 其中
    public static final T APPLE;
    public static final T BANANA;
    public static final T ORANGE;
    private static final T ENUM$VALUES[];
    static
    {
        APPLE = new T("APPLE", 0);
        BANANA = new T("BANANA", 1);
        ORANGE = new T("ORANGE", 2);
        ENUM$VALUES = (new T[] {
            APPLE, BANANA, ORANGE
        });
    }

都是static类型的,因为static类型的属性会在类被加载之后被初始化,当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化过程都是线程安全的。所以,创建一个enum类型是线程安全的。

标签:JAVA,APPLE,final,枚举,线程,new,ORANGE,static,public
来源: https://www.cnblogs.com/jason47/p/14447205.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有