我想要一个同步块,其中要同步的对象是从方法调用返回的:
...
synchronized( someGetMethod() ) {
// synchronized block
}
...
是否假设“someGetMethod”已同步或仅“//同步块”部分?
先感谢您
编辑:我有一个集合(要锁定的对象映射)。“someGetMethod”检查对象是否存在于地图上,如果没有,它将添加并返回它以便被锁定。从下面的答案中,我了解到“someGetMethod”可以返回一个已经在 Map 上的值,但是在进入同步块之前,切换到另一个线程,这可能会删除上述值。结果,另一个线程可能通过“someGetMethod”进行相同的检查,现在得到不同的结果。所以看来我应该从同步块中删除,有更好的选择吗?
Edit2:谢谢大家的帮助。我发现了一个类似的问题 - Java synchronized block using method call to get synch object