Javaの「ReentrantLock」の意味は何ですか?

znlyj:

再入可能性とは、ロックが呼び出しごとではなくスレッドごとに取得されることを意味します。

固有のロックはスレッドによって保持されているので、スレッドが1回実行されると、呼び出しベースになることを意味しませんか?

私はロックを取得する場合、スレッドでは、:ありがとうございます、それがあることを意味らしいlockAとき処理機能doAどのコール機能doB、およびdoBまた、ロックを必要としlockA、その後、再入可能性があるウィル。Javaでは、この現象はスレッドごとに取得されるため、デッドロックを考慮する必要はありませんか?

スティーブンC:

再入可能性とは、ロックが呼び出しごとではなくスレッドごとに取得されることを意味します。

それは誤解を招く定義です。それは本当ですが、本当の意味はありません。

再入可能性とは、(一般的にはCS / IT用語で)何かを実行し、まだ実行している間にもう一度実行することを意味します。ロックの場合、それはあなたがシングルスレッドでこのようなことをすることを意味します

  1. 「foo」のロックを取得します。
  2. 何かをする
  3. 「foo」のロックを取得します。以前に取得したロックを解放していないことに注意してください。
  4. ...
  5. 「foo」のロックを解除する
  6. ...
  7. 「foo」のロックを解除する

再入可能ロック/ロックメカニズムを使用すると、同じロックを取得しようとすると成功し、ロックに属する内部カウンタが増加します。ロックは、ロックの現在の所有者が2回解放したときにのみ解放されます。

これは、プリミティブオブジェクトロック/モニターを使用したJavaの例です...

Object lock = new Object();
...
synchronized (lock) {
    ...
    doSomething(lock, ...)
    ...
}

public void doSomething(Object lock, ...) {
    synchronized (lock) {
        ...
    }
}

再入可能の代替手段は非再入可能ロックです。この場合、スレッドがすでに保持しているロックを取得しようとすると、エラーになります。

再入可能ロックを使用する利点は、すでに保持しているロックを誤って取得したために失敗する可能性を心配する必要がないことです。欠点は、ロックが保護するように設計された変数の状態を変更しても何も変化しないとは想定できないことです。しかし、それは通常問題ではありません。ロックは通常、他のスレッドによって同時に発生する状態変更から保護するために使用されます。


だから私はデッドロックを考慮する必要はありませんか?

そうです。

スレッドはそれ自体に対してデッドロックしません(ロックが再入可能である場合)。ただし、ロックしようとしているオブジェクトをロックしている可能性のある他のスレッドがある場合は、デッドロックが発生する可能性があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

(=>)=(、)の意味は何ですか?

分類Dev

Javaでのこの式の意味は何ですか?

分類Dev

Pythonでの[:]の意味は何ですか

分類Dev

XPathでの.//の意味は何ですか?

分類Dev

Pythonでの[...]の意味は何ですか?

分類Dev

Fortranでの(/ ... /)の意味は何ですか

分類Dev

PHPでの「| =」の意味は何ですか?

分類Dev

PowerShellでの$ {}の意味は何ですか?

分類Dev

JSでの「<-」の意味は何ですか

分類Dev

PostgreSQLでの&&の意味は何ですか?

分類Dev

Luaでのfor ... inの意味は何ですか?

分類Dev

UNIXでの「../」の意味は何ですか?

分類Dev

Linuxでの `../`の意味は何ですか?

分類Dev

Pythonでの*の意味は何ですか?

分類Dev

。@のNullable java.utilでの意味は何ですか?

分類Dev

JavaでのSystem.out.printlnの意味は何ですか?

分類Dev

Javaでのsyso-statementsの意味は何ですか?

分類Dev

Kotlinでの「ClassInstance。[Someclass :: class.java]」の意味は何ですか?

分類Dev

Javaでの単一コードの意味は何ですか

分類Dev

Pythonの哲学の意味は何ですか?

分類Dev

変数名の$の意味は何ですか?

分類Dev

Pythonの%()sの意味は何ですか?

分類Dev

Goの「... Type」の意味は何ですか?

分類Dev

URLの「@」の意味は何ですか?

分類Dev

Laravelの$ errorsの意味は何ですか

分類Dev

Laravelの$ errorsの意味は何ですか

分類Dev

この[]の意味は何ですか?

分類Dev

cの「argv ['A']」の意味は何ですか?

分類Dev

TypeScriptの「:」の意味は何ですか?

Related 関連記事

ホットタグ

アーカイブ