2017-07-28 10 views
0

thisExample.thisは同じオブジェクトですか?同期の差

など。​​内のthisExample.classは同じオブジェクトですか?

class Example { 
    public Example() { 
     synchronized(this) { 
      // some code 
     } 
    } 
} 


class Example { 
    public Example() { 
     synchronized(Example.class) { 
      // some code 
     } 
    } 
} 
+0

明らかにそうではありません。最初はオブジェクト、2番目はクラス全体です。 – Tom

+0

'Example.class'はサンプルクラスです。 'this'は' Example'の具体例です。同じではありません。 – khelwood

+0

これらは同じではありません。 'this'は現在のインスタンスを返し、' Example.class'は 'Example'のクラスのインスタンスを返します。 – Lino

答えて

2

いいえ、thisモニタとして現在のオブジェクトを使用するが、モニターとしてExample.class使用Example.class

1

いいえ、thisExampleのインスタンスであり、Example.classClassのインスタンスです。

0

これは、この/現在のオブジェクトの代わりにロックされたクラスへのアクセスを同期化します。より簡単で効果的なものを使用してください。 thisに同期

1

は、クリティカルセクションが同じオブジェクトに再入力することができないことを意味し、インスタンスレベルロックです。 Example.classに同期

this

を含むクラスの他のインスタンスは、そのクリティカルセクションに入ることができないことを意味し、クラスレベルロックです。

ご覧のとおり、クラスレベルロックは、ある意味、より劇的です。

関連する問題