3

I have a class

class Foo{

    static synchronized get(){}
    synchronized() getMore(){}
}

I have 2 objects Foo.get() and f.getMore() running in 2 different threads t1 and t2. i had a dobuts whether when thread t1 had got a lock on the class can thread t2 access the method getMore or would t2 be prevented from getting the access and the lock to the method since the class object is locked by t1.

4

4 に答える 4

3

静的同期 ---> クラス レベル ロック (クラス レベル スコープ)

それは似ています

synchronized(SomeClass.class){
 //some code
}

シンプルな同期 ---> インスタンス レベルのロック

例:

class Foo{

     public static synchronized void bar(){
         //Only one thread would be able to call this at a time  
     }

     public synchronized void bazz(){
         //One thread at a time ----- If same instance of Foo
         //Multiple threads at a time ---- If different instances of Foo class
     }

}
于 2013-01-07T11:17:27.917 に答える
3

Class静的メソッドは、インスタンス オブジェクトではなくオブジェクトで同期します。2 つの異なるオブジェクトで動作する 2 つのロックがあります。上記のシナリオでは、ブロッキング動作はありません。

于 2013-01-07T11:13:39.857 に答える
1

synchonized static method、Fooクラスに代わって関連付けられたjava.lang.Classオブジェクトのロックを取得します。

実際のsynchonized instance methodオブジェクトのロックを取得します。

于 2013-01-07T11:37:59.063 に答える
1

synchonizedオブジェクトをstatic synchronizedロックし、クラスを表すオブジェクトをロックします。

t1 と t2 はこれらのメソッドを同時に呼び出すことができますstatic synchronizedが、1 つのスレッドを除くすべてのスレッドがwait()ing でない限り、両方をメソッドに含めることはできません。

注: t1 と t2 はgetMore()、異なるオブジェクトに対して同時に呼び出すことができます。

于 2013-01-07T11:15:16.393 に答える