【问题标题】:Java Reflection and thread-safetyJava 反射和线程安全
【发布时间】:2023-03-27 16:50:01
【问题描述】:

我有一些反映类的方法,例如:

type.getMethods()
method.getAnnotation(annotationClass)
method.getParameterTypes()
method.getParameterAnnotations()[paramIndex];
method.getParameterTypes()[paramIndex];

应用程序是多线程的。在不锁定到位的情况下调用这些方法是否安全?

【问题讨论】:

  • 它应该在Java规范中说。如果它没有提到线程安全,就假设它们没有。
  • 谢谢。您认为从同时调用任何这些方法的不同线程获得不同结果有什么危险吗?

标签: java multithreading thread-safety


【解决方案1】:

这是安全的,因为您无需更改任何内容。

【讨论】:

  • 如果我们知道foo.get(...) 不会改变任何东西,那并不能保证任何线程都可以随时安全地调用foo.get(...)。如果你调用其他线程foo.set(...) 会发生什么?这可能是“安全的”,也可能是“不安全的”,具体取决于 Foo 类的实现方式。
  • OP 说的是调用反射 API 方法。不是对象本身的方法。所以知道某个类有一些方法是完全线程安全的。
  • 好的,所以这些方法调用安全的原因不是因为这些方法没有改变任何东西,而是因为 nothing 改变了它们返回的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2020-04-15
  • 2010-10-12
  • 1970-01-01
  • 2015-05-16
  • 2012-06-19
相关资源
最近更新 更多