簡體   English   中英

單個類加載器中的java.lang.reflect.Field實例是uniq嗎?

[英]Is java.lang.reflect.Field instance uniq in single class loader?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM