1

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

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

java可以确保每次我通过反射获得一个Field对象,它总是同一个实例吗?所以我可以在上面同步代码块。我知道 Class 可以,但不确定 Field。谢谢

4

1 回答 1

3

这个简单的例子表明它不是同一个实例(它打印错误)。你为什么要在一个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
    }
}
于 2013-03-15T10:38:03.700 回答