12

Brian Goetz の著書『Java Concurrency in Practice』では、再入可能ロックの例が次のようにプログラムされています。

Lock lock = new ReentrantLock();

ただし、上記のコードを次のように変更するかどうかを知りたいです。

private static final Lock lock = new ReentrantLock();

ロックがミューテックスとして機能するようになるか、不要で冗長な場合。

したがって、ロックが非公開、静的、および最終に設定された場合、このコードの機能は変化しますか?

lock.lock();
try {
    //method stuff
} finally {
    lock.unlock();
}

よろしくお願いします。マット

4

2 に答える 2

22

はい。

finalもちろん影響はありprivateませんがstatic、すべてのインスタンスが同じロックを共有することを意味します。

したがって、インスタンスが 2 つある場合、コード ブロックを 2 つのスレッドで同時に実行することはできません。

ロックが静的でない場合、各インスタンスは独自のロックを取得します。これは、より多くのスレッドが同時にコードを実行できることを意味します (もちろん、動作するインスタンスによって異なります)。

于 2011-04-15T15:12:54.240 に答える
4

静的ロックを作成することは、

synchronized(MyClass.class){

}

本質的にはクラスレベルのロックです

于 2011-04-15T15:13:01.343 に答える