如果有多个线程访问同步块,我们就知道不会发生竞争条件。但是如果我们使用Reflection API来改变实例变量,它会导致竞争条件。如果确实如此,我们应该如何正确使用Reflection API
答案 0 :(得分:4)
如果我们使用Reflection API来更改实例变量,它会导致竞争条件吗?
当然,它会。
如果是,我们应该如何正确使用Reflection API?
您可以在您设置其属性的对象上进行同步,如下所示:
Object obj = ...
Field f = c.getDeclaredField("...");
synchronize(obj) {
f.set(obj, newVal);
}