2013-03-15 56 views
1

我有一些在一个Field对象中同步的java代码。它看起来像:在单个类加载器中是否存在java.lang.reflect.Field实例uniq?

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

java可以确保每次我通过反射得到一个Field对象时,它总是一样的实例吗?所以我可以同步代码块。 我知道Class对它没有问题,但对Field没有把握。 谢谢

回答

3

这个简单的例子表明它不是相同的实例(它打印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 
    } 
} 
+0

我想在数据库中实现自动增量列。因此,关于该字段(列)的所有创建操作都应该同步。 – 2013-03-16 10:24:44

+0

@WilliamBao那么你应该问这个问题。根据数据库的不同,可能有一种方法可以自动为您完成。如果没有,例如一个“Map ”,其中键为列,值为“自动增量”部分可能工作。 – assylias 2013-03-16 10:34:05

相关问题