反射API会导致同步块中的竞争条件

时间:2014-08-16 23:18:15

标签: java multithreading reflection

如果有多个线程访问同步块,我们就知道不会发生竞争条件。但是如果我们使用Reflection API来改变实例变量,它会导致竞争条件。如果确实如此,我们应该如何正确使用Reflection API

1 个答案:

答案 0 :(得分:4)

  

如果我们使用Reflection API来更改实例变量,它会导致竞争条件吗?

当然,它会。

  

如果是,我们应该如何正确使用Reflection API?

您可以在您设置其属性的对象上进行同步,如下所示:

Object obj = ...
Field f = c.getDeclaredField("...");
synchronize(obj) {
    f.set(obj, newVal);
}