4

私のFooクラスがこのように見えたとします

public class Foo
{
    public static void func_1() { /* do something */ }
    public static void func_2() { /* do something */ }
}

そして、私のBarクラスはこのように見えました

public class Bar
{
    public void method_1()
    {
         synchronized(Foo.class)
         {
             Foo.func_1();
         } 
    }          
}

Foo.classでオブジェクトをロックする代わりに、 and をas としてBar.method_1宣言し、同じ目的でアーカイブすることはできますか?Foo.func_1Foo.func_2synchronized

ありがとうございました

4

3 に答える 3

3

静的同期メソッドはクラスのロックを取得し、ロックを取得するFoo.classことで同じことをしています。そうです、彼らは同じことを達成します。

于 2013-08-05T16:50:00.013 に答える
2

はい、それらは同じことを達成します- lock Foo.class以下は、 Java 言語仕様のセクション 8.4.3.6からの関連する抜粋です。

クラス (静的) メソッドの場合、メソッドのクラスの Class オブジェクトに関連付けられたモニターが使用されます。

クラスでsynchronized静的func_1()またはfunc_2()メソッドを使用すると、暗黙的にロックされ、明示的にロックされます。FooFoo.classsynchronized(Foo.class)

于 2013-08-05T16:50:31.530 に答える