题
我正在浏览一些代码片段,以查看同步方面。我相信锁定发生在物体上。在Java的情况下,我们仅参考对象。 Java应使用参考来采购对象并锁定对象。
如果引用恰好为null,会发生什么?我觉得这会破裂。如果要工作,则锁定也需要在参考文献上进行(这击败了我)。有人可以为我澄清一下吗?
synchronized (formatters) {
if(formatters == null) {
prepareCache(feedId);
}
}
解决方案
根据 到这个论坛, ,以及许多其他相关链接。如果格式器为null,则将抛出NullPoInterException。
其他提示
您将获得NullPoInterException。例如:
class A {
public static void main(String[] ss) {
Object o = null;
synchronized (o) {
}
}
}
给你:
Exception in thread "main" java.lang.NullPointerException
at A.main(A.java:4)
SSSH,您不应该知道这些实际上是 参考 到对象!将它们视为所呈现的 - 就像一个对象一样,而不是它们的实施方式。对象类提供一个锁,因此您的格式化器对象将继承它。如果格式化恰好是零的,则同步它将抛出NullPoInterException。
在可能的情况下,不要同步实际使用的对象。同步您在执行锁定的类中创建的私有最终对象。原因是其他人可能会选择相同的对象来同步,这意味着您不知道该锁定具有什么样的副作用。
它行不通。您同步 对象, , 不开 变量. 。当变量为null时,没有对象可以同步,因此会抛出异常。
不隶属于 StackOverflow