1

単一のプライベートオブジェクト変数(たとえば、)の状態を中心に構築されたクラスを想像してください。Map<Something>このクラスのすべてのメソッドは、そのオブジェクトを取得、設定、または変更しています。

2つの同期アプローチのどちらがあなたの心の中でより良いですか?おそらく、3番目のより良いオプションがあります。

  1. オブジェクトをカプセル化するクラスのすべてのメソッドを同期するか、変更するオブジェクトで同期します
  2. オブジェクトをカプセル化するクラスのインスタンスにアクセスするすべてのメソッドを同期させます。

つまり、内側から同期するのが良いのでしょうか、それとも外側から同期するのが良いのでしょうか。

4

1 に答える 1

1

にアクセスできるメソッドにはブロックMap variableが含まれてsynchronized(variable) { }いる必要があり、その変数へのすべてのアクセスはそのブロックに含まれている必要があります。もちろん、はnullであってはvariableなりません。

このようにして、コードが保護されたブロックで費やす時間をより適切に処理variableできます(たとえば、への読み取りまたは書き込みアクセス)。

その他の側面:クラスに保護するリソースが複数ある場合、それらが互いに干渉するため、同じことを行うことはできません。

于 2013-01-22T16:27:47.033 に答える