2016-12-21 9 views
0

クラスレベルのロックを取得するクラスがあるとします。クラスレベルのロックを達成するためには、クラス内に静的メソッドを必要とする必要がありますか、単純にsynchronized(MyClass.class)を使用すると、静的メソッドを使用せずにそのジョブを実行します。Javaでのクラスレベルのロック

+1

([Javaでは、クラス・レベルのロックは何]の可能性のある重複http://stackoverflow.com/questions/2462104/what-is-a-class -level-lock-in-java) – zombie

答えて

3

Classオブジェクトを同期させると、そのトリックが実行されます。

また、クラスレベルのロックが同じクラスの異なるクラスレベルのロックを妨げないようにするには、プライベートな静的フィールドをロックに宣言します。例えば

public class MyClass { 
    private static final Object myLock = new Object(); 
    private static final Object anotherLock = new Object(); 
    ... 
} 

ここでは、同じクラスに対して2つの異なる「クラスレベル」のロックがあります。

+0

その場合、以下に書かれたこのコードは私のクラスレベルロックの目的を達成するでしょうか? 'クラスhere-- クラスB {同期(A.class) {--someコード を {フィールドまたはクラスのいずれかの方法で静的キーワードを使用せずにここで いくつかのコード}} } ' – user5451270

+0

@ user5451270あなたが言っていることはうまくいくでしょうが、なぜそういったことをしたいのかわかりません。通常、静的メソッドの同期にはクラスレベルのロックが使用され、非静的メソッドの同期にはオブジェクトロックが使用されます。 – hagrawal

+0

@ハグワール私はそれを使用していません。私はちょうどそれがそれであることを確かめたいと思った。 – user5451270

0

あなたにもReentrantLockのを使用することができます。

private static final Lock lock1 = new ReentrantLock(); 
public static void main(String... strings) { 
    lock1.lock(); 
    //do Something 
    lock1.unlock(); 
} 
関連する問題