可能性の重複:
What is the Re-entrant lock and concept in general?javaのロック再入荷は何のために使用されていますか?
私はJavaでリエントラントロックを理解しようとしていますし、私は簡単な説明を探しています。なぜロックの再入国が必要ですか?どのような問題が解決しますか?シナリオ例が役に立ちます。
可能性の重複:
What is the Re-entrant lock and concept in general?javaのロック再入荷は何のために使用されていますか?
私はJavaでリエントラントロックを理解しようとしていますし、私は簡単な説明を探しています。なぜロックの再入国が必要ですか?どのような問題が解決しますか?シナリオ例が役に立ちます。
リエントラントロックは、同じスレッドが複数回取得することがあります。一般に、リエントラントロックは、ロックされているのと同じ回数ロックを解除する必要があります。リエントラントロックはしばしばコード化する方が簡単です。 AがBとBがCを呼び出しているが、このコードのクライアントがAまたはBまたはCを呼び出すことができ、これらの各メソッド内でロックしたい場合、再入可能なロックが問題。一度に1つのスレッド以外のスレッドがこのコードにアクセスすることはできませんが、複数のロック取得が可能になり、デッドロックは発生しません。他のコードがdoA
またはdoB
またはdoC
のいずれかを呼び出すことができますし、それらのすべてが同じロックを使用して、いくつかの作品を中心に同期
public class SyncTest {
private final Lock lock = new ReentrantLock();
public void doA() {
lock.lock();
try {
doB();
doSomethingForA();
} finally {
lock.unlock();
}
}
public void doB() {
lock.lock();
try {
doC();
doSomethingForB();
} finally {
lock.unlock();
}
}
public void doC() {
lock.lock();
try {
doSomeWorkThatEveryoneDoes();
} finally {
lock.unlock();
}
}
}
:
は、あなたがこれを持っているとしましょう。使用されるロックは、同じスレッドが複数回取得できるという点で「再入可能」です。ロックが再入可能でない場合は、doA
と入力してdoB
と入力してロックを取得しようとすると、自分自身が所有しているにもかかわらず、ロックがすでに所有されているためデッドロックになります。
たとえば、1のカウントに初期化された純粋なカウント・セマフォは、非リエントラント・ロックです。同じスレッドが2回取得しようとすると、永久にある種の自己デッドロックでブロックされます。
かなり重複していません。この質問は、より具体的であり、特定のJavaロック実装に関連しています。他の質問は非常に一般的です。 – Eddie