如果有多个线程访问同步块,我们知道竞争条件不会发生。但是如果我们使用反射API来改变一个实例变量,它会导致竞争条件吗?如果有,我们应该如何正确使用反射API
如果我们使用反射API来改变一个实例变量,它会导致竞争条件吗?
当然可以。
如果是,我们应该如何正确使用反射API?
你可以在你设置属性的对象上同步,像这样:
Object obj = ...
Field f = c.getDeclaredField("...");
synchronize(obj) {
f.set(obj, newVal);
}