0

同期の側面を見て、いくつかのコード スニペットを調べていました。オブジェクトでロックが発生すると思います。Java の場合、オブジェクトへの参照しかありません。Java は参照を使用してオブジェクトを取得し、ロックする必要があります。

参照が null の場合はどうなりますか? これは壊れそうな予感。これが機能する場合は、参照でもロックを行う必要があります (これは私を打ち負かします)。誰かが私のためにこれを明確にすることができます.

    synchronized (formatters) {
        if(formatters == null) {
            prepareCache(feedId);
        }
    }
4

6 に答える 6

5

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)
于 2010-02-11T09:13:12.963 に答える
5

Java言語仕様の同期されたステートメントセクションから:

"SynchronizedStatement: synchronized ( Expression ) Block" ...それ以外の場合、式の値がnullの場合、NullPointerExceptionがスローされます。」

于 2010-02-11T09:17:16.003 に答える
2

このフォーラム、および他の多くの関連リンクによると。formatters が null の場合、NullPointerException がスローされます。

于 2010-02-11T09:08:53.733 に答える
1

Sssh、それらが実際にオブジェクトへの参照であることを知っているはずはありません!それらがどのように実装されているかではなく、オブジェクトのように提示されていると考えてください。Objectクラスは単一のロックを提供するため、フォーマッターオブジェクトはそれを継承します。フォーマッターがnullの場合、それを同期するとNullPointerExceptionがスローされます。

于 2010-02-11T09:15:53.743 に答える
1

可能であれば、実際に使用されているオブジェクトを同期しないでください。ロックを行うクラス内で作成したプライベート最終オブジェクトで同期します。この理由は、他の人が同じオブジェクトを選択して同期する可能性があるためです。つまり、このロックがどのような副作用をもたらすかがわかりません。

于 2010-02-11T09:31:22.573 に答える
0

うまくいきません。変数ではなく、オブジェクトを同期します。変数が null の場合、同期するオブジェクトがないため、例外がスローされます。

于 2010-02-11T09:34:45.577 に答える