是java.lang.reflect.Method线程安全的?
我的程序的分析结果显示,Class.getMethod()在多次调用时花费了相当多的计算时间,比我预期的要多一点.我可以调用一次,并将生成的方法存储在易于访问的地方.但是,多个Web工作线程将同时使用存储的Method对象.
这样安全吗?
如果在多个线程可用之后不更改方法的状态,则可以安全地使用该方法.例如,您可以在两个线程中调用setAccessible(true)和setAccessible(false),结果将不是线程安全的.然而,这没有什么用处.
简而言之,Method.setAccessible()不是技术上线程安全的,但您应该能够以线程安全的方式使用它.
Java 类保证每个 ClassLoader 实例仅定义一次,因此您可以放心地假设定义(包括方法及其签名)不会随时间而改变,因此您可以安全地“缓存”它们以供多个线程使用。
但是,请记住,具有相同完全限定名称(包 + 类名)的类可以由单独的 ClassLoader 实例进行不同的定义。
| 归档时间: |
|
| 查看次数: |
3873 次 |
| 最近记录: |