java.lang.reflect.Field实例是否在单类加载器中?

java.lang.reflect.Field实例是否在单类加载器中?,java,synchronization,classloader,Java,Synchronization,Classloader,我在Field对象中同步了一些java代码。它看起来像: Field f = SomeClass.class.getDeclaredField("field1"); synchronized(f) { .... } java能保证每次我通过反射得到一个Field对象时,它总是同一个实例吗?所以我可以在上面同步代码块。 我知道上课没问题,但对菲尔德的情况不太确定。 谢谢这个简单的例子表明它不是同一个实例(它打印为false)。为什么要在字段上同步对象?我想你会意识到这并不等同于锁定基础变量

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

Field f = SomeClass.class.getDeclaredField("field1");
synchronized(f) {
  ....
}
java能保证每次我通过反射得到一个Field对象时,它总是同一个实例吗?所以我可以在上面同步代码块。 我知道上课没问题,但对菲尔德的情况不太确定。
谢谢

这个简单的例子表明它不是同一个实例(它打印为false)。为什么要在
字段上同步
对象?我想你会意识到这并不等同于锁定基础变量

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

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
    }
}

我想在数据库中实现自动增量列。所以所有与该字段(列)相关的创建操作都应该同步。@WilliamBao那么您可能应该问这个问题。根据数据库的不同,可能有一种方法可以自动完成。如果不是,则映射
,例如,其中键是列,“自动增量”部分可能工作的值。