Java同步问题

que*_*zen 0 java multithreading synchronized

我正在浏览一些查看同步方面的代码片段.我相信锁定发生在物体上.在java的情况下,我们只有对象的引用.Java应该使用引用来获取对象并将其锁定.

如果引用恰好为null会发生什么?我觉得这会破裂.如果这是有效的,锁定也需要在引用上发生(这比我好).有人可以为我澄清这一点.

    synchronized (formatters) {
        if(formatters == null) {
            prepareCache(feedId);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Han*_*s W 5

你得到一个NullPointerException.例如:

class A {
    public static void main(String[] ss) {
        Object o = null;
        synchronized (o) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

给你:

Exception in thread "main" java.lang.NullPointerException
    at A.main(A.java:4)
Run Code Online (Sandbox Code Playgroud)


小智 5

来自Java语言规范中的synchronized声明部分:

"SynchronizedStatement: synchronized ( Expression ) Block" ...否则,如果Expression的值为null,则抛出NullPointerException."