問題タブ [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.
java - Java ReentrantLock の問題
こんにちは、 に関していくつか問題がありLock's implementation: ReentrantLock
ます。singleton cache
インサイドを使用していSpring 3.0(web)
ます。しかし、まったく同時に複数のブラウザー タブを開くと、すべてのスレッドがロックされているように見え、不要な Web サービス呼び出しがいくつか発生します。どうしてこれなの?lock.tryLock()
スレッドセーフではありませんか。atomic boolean
代わりに を使用してみましたが、問題は解決しません。Cache の同じインスタンスが参照されていることも確認しました。
よろしくお願いします。
java - 部分的なスレッドセーフはJavaクラスをスレッドセーフにしますか?
スレッドセーフであると主張されている Java クラスの例を以下に見つけました。スレッドセーフになる方法を誰か説明してもらえますか? クラスの最後のメソッドが、リーダー スレッドの同時アクセスに対して保護されていないことがはっきりとわかります。または、ここで何か不足していますか?
java - ロック スコープについて
このリンクから、「lock() および unlock() メソッド呼び出しは明示的であるため、コードの 1 行から複数のメソッドにまたがるスコープまで、任意のロック スコープを確立して、どこにでも移動できます」と理解しています。
上の文から分かることは、
したがって、基本的には、method1 と method2 を順番に呼び出すことができ、呼び出しがスレッドセーフであると想定できます。
上記のように本当かどうかはわかりません。
method1/method2 のペアを既に実行しているときに、誰かが method2 を呼び出したらどうなりますか? それは物事を複雑にしませんか。
関数から制御が返される前に、関数自体でロックを取得して解放する必要があると思います。私の理解は正しいですか?
java - Java の再入可能ロック
私はJavaのマルチスレッディングが初めてです。ロックを使用しようとしていました。コード サンプルを次に示します。
以下は、tryLock() を使用したときの出力です。
さて、私の理解では、最初のスレッドが tryLock() を実行すると、ロックを取得する必要があり、他のスレッドはロックを取得できないはずです。しかし、出力に示されているように、スレッド 1 がロックを取得した後、スレッド 2 も取得したロックなど。これはどのように可能でしょうか。ここで何が欠けているか教えてください。前もって感謝します。
java - 次のコンテキストでスレッドセーフを確保するにはどうすればよいですか?
processOutbox というメソッドがあります。スレッドセーフにしたい。あるスレッドがこのメソッドを使用しているときに、別のスレッドがこのメソッドを呼び出すことは望ましくありません。以下の方法で実装しました。私はそれを正しくしましたか?実装に抜け穴はありますか? ある場合は、どのように解決すればよいかアドバイスをお願いします。
java - ReantrantLock および Condition 変数
こんにちは :) Java の再入可能ロックと条件変数について学んでいます。私はたまたまこのチュートリアルに出くわしました。チュートリアルでは、著者は ReentrantLock を利用した Producer-Consumer の例を提供しています。
メソッドl.lock()
とl.unlock()
in はProducer
不要Consumer
ですか? Shared
オブジェクトgetSharedChar()
とsetSharedChar()
メソッドにすでにロック/ロック解除を適用していることに気付きました。それとも、これは条件変数を使用するための推奨パターンですか?
これは良い習慣ではありませんか?より良い例へのリンクを提供できますか?
ありがとう:)
java - ReadWriteLock のアップグレードが許可されないのはなぜですか?
ReadWriteLock
ReentrantReadWriteLock
ダウングレードは実装によって許可されています (tryLock()
以下の例では常に が返されますtrue
):
同様の方法でロックのアップグレードを許可しない理由は何ですか? 以下の書き込みロックのtryLock()
メソッドは、読み取りロックを保持している他のスレッドがない場合、デッドロックのリスクなしで安全に戻ることができます。true
java - 再入ロック条件
このコードでは、ReentrantLock と Condition を使用して、リモート サーバーからの特定のコールバックを待機するクラスを実装しています。このコードをテストして動作しているようですが、いくつか質問があります。
onCallbackReceived() で alock.lock() / unlock() を実行する必要があるのはなぜですか。lock() / unlock() を呼び出さないと、IllegalState 例外が発生していました。onCallbackReceived() が別のスレッドによって呼び出されると、waitForCallback() の呼び出し元によってロックが保持されるため、混乱しています。そのため、onCallbackReceived() の alock.lock() は常に失敗します。
while ループで condition.await() を waitForCallback() にラップする必要がありますか?
while(message==null) condition.await();