2012-10-06 77 views
2

J2SE 5.0規範方法ClassFileTransformer.transform concurrect調用(類加載器的類加載器,字符串的className,類classBeingRedefined,ProtectionDomain中的ProtectionDomain,字節[] classfileBuffer)實現告訴:爪哇 - ClassFileTransformer.transform(...)爲同一類加載器和一對的className

變壓器將被調用用於每個新的類定義和每個 類的重新定義。使用ClassLoader.defineClass對 進行新類定義的請求。使用Instrumentation.redefineClasses或其本機等價物創建類別重定義請求 。 在處理請求期間調用變換器,之前 類文件字節已被驗證或應用。

利用這些信息,我不能說,如果有可能的方法ClassFileTransformer.transform要爲同一運行時類(類加載器&的className)同時調用。我知道可以爲同一個類同時調用Instrumentation.redefineClass方法,但這並不意味着這種調用可能會導致同一類的ClassFileTransformer.transform的併發調用。有什麼方法可以澄清我的不理解?

這對我來說很重要,因爲我使用Javassist進行轉換,並且可以從併發運行的方法ClassFileTransformer.transform中使用同一個CtClass實例。目前我使用synchronized(ctClass)塊中的CtClass實例工作,以防萬一。

回答

0

我只是試着爲同一個類同時調用方法Instrumentation.redefineClasses,並檢查我的類文件轉換器transform方法是否被同時調用。答案是肯定的,ClassFileTransformer.transform方法可以由JVM爲同一個類同時調用。