局部变量上的同步
我有一个多线程Java代码,其中:
- 多个线程从同步共享存储中读取有状态对象(即,因此,某些线程可能引用相同的对象);
- 然后,每个线程调用一个方法并将其对象传递到那里;
process()
-
process()
以某种方式处理对象,这可能会导致对象状态的更改; - 这些状态更改应同步。
我创建了一个这样的方法:
public void process(Foo[] foos) {
for (final Foo foo : foos) {
if (foo.needsProcessing()) {
synchronized (foo) {
foo.process(); // foo's state may be changed here
}
}
}
}
据我所知,这看起来是合法的。但是,IntelliJ的检查抱怨在局部变量上进行同步,因为“不同的线程很可能具有不同的本地实例”(这对我来说无效,因为我没有在方法中初始化foos)。
从本质上讲,我在这里想要实现的与同步方法Foo.process()相同(这对我来说不是一个选择,因为Foo是第三方库的一部分)。
我已经习惯了没有黄色标记的代码,所以来自社区的任何建议都值得赞赏。在本地进行同步真的那么糟糕吗?有没有替代方案可以在我的情况下工作?
提前致谢!