1. ホーム

[解決済み】Synchronized Blockの代わりにSynchronized Methodを使用する利点はありますか?

2022-04-17 16:01:06

質問

synchronized blockに対するsynchronized methodの利点を、例を挙げて教えてください。

どのように解決するのですか?

<ブロッククオート

synchronized blockに対するsynchronized methodの優位性を、例を挙げて教えてください。ありがとうございます。

ブロックよりもシンクロナイズドメソッドを使用する明確な利点はありません。

おそらく唯一の利点は(私はそれを利点とは呼ばないが)、オブジェクトの参照を含める必要がないことだろう。 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() {
    ... 
}

vs.

// 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
}