java - java.lang.reflect.Field 实例在单个类加载器中是唯一的吗?

标签 java synchronization classloader

我在 Field 对象中同步了一些 java 代码。看起来像:

Field f = SomeClass.class.getDeclaredField("field1");
synchronized(f) {
  ....
}

java能保证每次反射得到的Field对象都是同一个实例吗?所以我可以在上面同步代码块。 我知道 Class 没问题,但不确定 Field。 谢谢

最佳答案

这个简单的例子表明它不是同一个实例(它打印 false)。无论如何,您为什么要在 Field 对象上进行同步?我想您已经意识到这不等同于锁定基础变量。

您应该解释为什么您想要这样做,因为肯定有更好的选择。

class Test {

    int i;

    public static void main(String[] args) throws Exception {
        Class c = Test.class;
        Field f1 = c.getDeclaredField("i");
        Field f2 = c.getDeclaredField("i");
        System.out.println(f1 == f2); //prints false
    }
}

关于java - java.lang.reflect.Field 实例在单个类加载器中是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430055/

相关文章:

multithreading - 如何避免消息队列泛滥?

c++ - 队列的同步问题

java - MyClassLoader.defineClass java.lang.SecurityException : Prohibited package name: java. lang

java - 对话框输入/输出帮助

java - Groovy - 如何创建内部包含变量的路径目录

java - 同步方法的 weakValue 映射引用中的内存泄漏

java - 从任意位置加载自定义类

java - ClassLoader.load(name) 和 Class.forName(name) 有什么区别

java - 从 Eclipse 运行的 RCP 应用程序运行良好,导出它会抛出 InjectionExceptions

java - 通用 Pair 类的compareTo() 方法?