1

これは当たり前のようですが、私はこれを正しく行っていることを確認したいと思います。null参照のロックを取得しようとすると、これは正しく機能しませんか?参照ではなくオブジェクトのプロパティを使用するためですか?

Object lock = null;

synchronized(lock)
{
}
4

2 に答える 2

4

null参照のロックを取得しようとすると、これは正しく機能しませんか?

それは正しいです。NullPointerExceptionを使用して同期しようとすると、が表示されますnull

参照ではなくオブジェクトのプロパティを使用するためですか?

ではない正確に。ロック状態は、問い合わせることができないため、通常の意味でのプロパティではありません。しかし、はい、状態はオブジェクトの一部です。

(しかし、考えてみてください。ロック状態が参照の一部になる可能性はありますか?もしそうなら、どのように同期するthisか、またはオブジェクト参照をパラメーターとして渡すことができますか?参照はコピーとして渡されます...そして1つのコピーへの変更は他のコピーに伝播できません。また、ロック状態が伝播できない場合、参照の独自のコピーを持つ2つのスレッドは意味のある方法で同期できません。)

于 2012-04-16T08:32:55.303 に答える
3

はい。同期はオブジェクト自体で行われます。

于 2012-04-16T08:22:14.647 に答える