問題タブ [reentrantlock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
8879 参照

java - javaで飢餓を解決するために公正なロックを作成する方法は?

優先度に関係なく、各スレッドに次々とロックが与えられるように、公平なロックを作成したいと考えています。

だから私は4つのスレッドを持っています。最大優先度の 3 つと最小優先度の 1 つ。フェアロックを作成する

このデモを実行すると、最小優先度のスレッドが最大優先度のスレッドと同じ回数実行されることはありません。でもフェアロックはそのためだと思います。

フェアロックの正しい使い方は?

0 投票する
1 に答える
370 参照

java - ReentrantLockでロックされたクリティカルセクションで指定時間待つ方法は?

スレッドが によってロックされたクリティカル セクションにある間、スレッドを何らかの方法で 1 秒間停止する必要がありますReentrantLock

私のコードは次のとおりです。

run() メソッドを呼び出すとlock.wait(1000)、 がスローされIllegalMonitorStateExceptionます。

lock.lock()方法でモニターを取得した場合、この例外が発生するのはなぜですか?

super.wait(1000)の代わりに呼び出すと同じことが起こりlock.wait(1000)ます。

0 投票する
1 に答える
1181 参照

java - ExecutorService と同じファイルへの書き込み命令

ファイルに順番に書き込む必要がある ExecutorService でタスクをインスタンス化しようとしているため、33 個のタスクが存在する場合、順番に書き込む必要があります...

LinkedBlockingQueue と ReentrantLock を使用して順序を保証しようとしましたが、フェア モードで理解していることから、ExecutorService が作成した x スレッドの中で最も若いものにロックが解除されます。

コンストラクタで

そのため、入力ファイル ピア タスクのクォータを処理します。

タスクが行う

そして私の問題はここで発生します:

0 投票する
1 に答える
146 参照

java - ReentrantLock を使用して最初のスレッドがロックされていても、2 番目のスレッドが実行された

私はJavaの初心者で、実装でJavaの概念を学ぼうとしています。ここで ReentrantLock クラスを使用する理由は、ロックを理解するためです。

私は 3 つのスレッドを生成しています。これらのスレッドでは、グローバル カウンターをインクリメントするだけです。ロックを使用して、他のスレッドによるカウンターの上書きを保護しています。

上記のコードからの観察された出力

私の期待される出力

私 は reentrantlock -lock-doesnt-block-other-threadsを経験しましたが、ここでは使用していません

Condition.await()

したがって、実装と相互に関連付けることができませんでした。間違いを理解するか、ReentrantLock アプリケーションを実装で理解するのを手伝ってください。これにより、期待される出力と観察される出力が異なります。

0 投票する
1 に答える
346 参照

java - Java 並行処理で公平性モードを使用するのはいつですか?

なぜこの機能がJavaで必要なのか、私は本当に混乱しています。ex: で公平性モードを使用できる実際の例をいくつか共有してくださいReentrantLock, ReadWriteLock, Semaphore

0 投票する
1 に答える
1053 参照

java - (再入可能) ロックを再帰的に取得するのはなぜですか?

ReentrantLock を使用すると、スレッドは同じロックを再帰的に取得できるため、連続するロック/ロック解除でロック カウントが増減します。一方、ロック カウントは、他のスレッドに解放される前にゼロにデクリメントする必要があります。

なぜ、またはどのような状況で、再帰的にロックを取得するコードを書くのでしょうか?

この機能を持つ唯一のポイントは、メソッド (実行中にロックを取得する) が再帰的に呼び出される再帰コードを書きやすくすることです。

スレッドによるロックの再帰的/反復的な取得が役立つ可能性がある他の状況はありますか?

質問の明確化:

  • 再入可能なロックは無視してください。たまたま、再入可能ロックによって再帰性が提供されます。
  • ロックの再帰的な機能について言及しています
  • 再入可能ロックを使用する理由については回答しないでください。
  • 「再帰性はリエントラントロックの主な特徴ではない」と答えないでください
  • ロックが再入可能かどうかに関係なく、どのような状況でロックを再帰的に取得する必要があるかを知りたいです。
0 投票する
0 に答える
47 参照

java - 複数回のロック試行の回避 Java

私は次の方法を持っています:

別のパラメーターを取得するには、このメソッドをオーバーライドする必要があります。

私の質問は、(2 番目のメソッドが呼び出された場合に) ロックを 2 回取得せずにこれを達成するにはどうすればよいかということです。元のメソッドの署名を変更したくありません。システム内の 10 か所で変更を行うことになるからです。アイデアをいただければ幸いです。必要に応じて、質問に関してより明確にすることができます。ありがとう。