同期ブロックの代わりに同期メソッドを使用する利点はありますか? 質問する

同期ブロックの代わりに同期メソッドを使用する利点はありますか? 質問する

同期ブロックに対する同期メソッドの利点を例を挙げて教えていただけますか?

ベストアンサー1

同期ブロックに対する同期メソッドの利点を例を挙げて教えていただけますか? よろしくお願いします。

ブロックよりも同期メソッドを使用する明確な利点はありません。

おそらく唯一の利点は (ただし、利点とは呼びませんが)、オブジェクト参照を含める必要がないことですthis

方法:

public synchronized void method() { // blocks "this" from here.... 
    ...
    ...
    ...
} // to here

ブロック:

public void method() { 
    synchronized( this ) { // blocks "this" from here .... 
        ....
        ....
        ....
    }  // to here...
}

分かりますか? まったくメリットがありません。

ただし、ブロックにはメソッドよりも優れた点があり、主に柔軟性の点で、メソッドを同期するとオブジェクト全体がロックされるのに対し、別のオブジェクトをロックとして使用できるという利点があります

比較する:

// locks the whole object
... 
private synchronized void someInputRelatedWork() {
    ... 
}
private synchronized void someOutputRelatedWork() {
    ... 
}

// Using specific locks
Object inputLock = new Object();
Object outputLock = new Object();

private void someInputRelatedWork() {
    synchronized(inputLock) { 
        ... 
    } 
}
private void someOutputRelatedWork() {
    synchronized(outputLock) { 
        ... 
    }
}

また、メソッドが大きくなる場合でも、同期セクションを分離したままにすることができます。

 private void method() {
     ... code here
     ... code here
     ... code here
    synchronized( lock ) { 
        ... very few lines of code here
    }
     ... code here
     ... code here
     ... code here
     ... code here
}

おすすめ記事