可能性の重複:
Avoid synchronized(this) in Java?"this"またはJavaのプライベートオブジェクトでの同期化?
コードの2枚の違いは何ですか?それぞれのメリットとデメリットは何ですか?
1)
public class Example {
private int value = 0;
public int getNextValue() {
synchronized (this) {
return value++;
}
}
}
2)
public class Example {
private int value = 0;
private final Object lock = new Object();
public int getNextValue() {
synchronized (lock) {
return value++;
}
}
}
言及したものを
そうでなければ第2のアプローチは、に基づいて、より良い仕事でしょう(私の知る限り) - しかし、なぜ? 「this」(外からの「オブジェクト」だけ)の可視性はどのような悪影響を及ぼしますか? 「悪いコード」がどのようにして同期ターゲットに干渉を引き起こす可能性がありますか? –
'pubilc synchronized int getNextValue(){...}'は 'public int getNextValue(){synchronized(this){...}}'と全く同じですか? – Miquel