java.lang.reflect.Method线程安全吗?

bun*_*udi 7 java

java.lang.reflect.Method线程安全的?

我的程序的分析结果显示,Class.getMethod()在多次调用时花费了相当多的计算时间,比我预期的要多一点.我可以调用一次,并将生成的方法存储在易于访问的地方.但是,多个Web工作线程将同时使用存储的Method对象.

这样安全吗?

Pet*_*rey 6

如果在多个线程可用之后不更改方法的状态,则可以安全地使用该方法.例如,您可以在两个线程中调用setAccessible(true)和setAccessible(false),结果将不是线程安全的.然而,这没有什么用处.

简而言之,Method.setAccessible()不是技术上线程安全的,但您应该能够以线程安全的方式使用它.


mae*_*ics 5

Java 类保证每个 ClassLoader 实例仅定义一次,因此您可以放心地假设定义(包括方法及其签名)不会随时间而改变,因此您可以安全地“缓存”它们以供多个线程使用。

但是,请记住,具有相同完全限定名称(包 + 类名)的类可以由单独的 ClassLoader 实例进行不同的定义。