我正在浏览一些代码片段,以查看同步方面。我相信锁定发生在物体上。在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)

同步语句 部分 Java语言规范:

"SynchronizedStatement: synchronized ( Expression ) Block"...否则,如果表达式的值为null,则会抛出NullPoInterException。”

SSSH,您不应该知道这些实际上是 参考 到对象!将它们视为所呈现的 - 就像一个对象一样,而不是它们的实施方式。对象类提供一个锁,因此您的格式化器对象将继承它。如果格式化恰好是零的,则同步它将抛出NullPoInterException。

在可能的情况下,不要同步实际使用的对象。同步您在执行锁定的类中创建的私有最终对象。原因是其他人可能会选择相同的对象来同步,这意味着您不知道该锁定具有什么样的副作用。

它行不通。您同步 对象, , 不开 变量. 。当变量为null时,没有对象可以同步,因此会抛出异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top