問題タブ [synchronized]
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 の同期キーワードが、より正確な「mutexed」ではなく「同期」と呼ばれるのはなぜですか?
Java では、mutex されたステートメントを説明するために「同期」という言葉を使用することを選択するのは単に間違いだと聞いたことがあります (編集:「間違い」はここでの言葉の選択が不適切でした。編集を参照してください)。実際に選択の背後にある理由。
[編集]
Safyan のコメントに促されて、同期はスレッド間のタイミング関係を確立するための一般的な用語であることを付け加えたいと思います。これには、相互排除やレート制御などを含めることができます (たとえば、2 つのスレッドが同じレートで何かを実行するなど)。「mutexed」のようなより具体的なキーワードの代わりに、相互排除を意味する「synchronized」を使用することは、不必要にあいまいに見えます。
java - 同期ブロックに関する私の仮定は正しいですか?
同期されたブロックを持つメソッドのshout()があります。
このメソッドを実行するスレッドが 2 つある場合、2 つの「同期されたシャウト」が常に次々に表示されると仮定して正しいでしょうか? 「シンクロナイズド シャウト」の間に他のステートメントはありませんか?
java - 同期された不変の空のコレクション
Collections クラスを使用すると、任意のコレクションを同期化、不変、または空にすることができます
これらのタイプのコレクションを実装する必要がある場合、それぞれの用途は何ですか
java - synchronized() と ReentrantLock.lock() の混合
Java では、?ReentrantLock.lock()
とReetrantLock.unlock()
同じロック メカニズムを使用します。synchronized()
私の推測では「いいえ」ですが、間違っていることを願っています。
例:
スレッド 1 とスレッド 2 の両方が以下にアクセスできるとします。
スレッド 1 が実行されます。
スレッド 2 の実行:
スレッド 1 が最初にその部分に到達し、次にスレッド 1 が終了する前にスレッド 2 に到達すると仮定します。スレッド 2 は、スレッド 1 がsynchronized()
ブロックを離れるのを待ちますか、それとも先に進んで実行しますか?
java - Javaで静的メソッドを同期する方法
Javaでシングルトンパターンを実装するときに、この質問を思いつきました。以下にリストされている例は私の実際のコードではありませんが、元のコードと非常によく似ています。
静的同期メソッドの動作についてはよくわからないため、Google からいくつかの提案を得ています。同じクラスに複数の静的同期メソッドを持たない (またはできるだけ少なくする) ことです。静的同期メソッドを実装する場合、複数の静的同期メソッドがシステムのパフォーマンスを低下させる可能性があるため、クラス オブジェクトに属するロックが使用されると思います。
私は正しいですか?またはJVMは他のメカニズムを使用して静的同期メソッドを実装しますか? クラスに複数の静的同期メソッドを実装する必要がある場合のベスト プラクティスは何ですか?
皆さん、ありがとうございました!
敬具!
java - 簡単なJava同期の質問
Groovyコードでは、次のような単純なものがあります:#!/ usr / bin / env groovy
わかりました、これが私の問題です。
スレッド(A)は別のスレッドでアクションを開始し、その完了を待ちます-OKこれは正確には正しくありません。それ以外の場合はthread.join()を使用できます。このスレッドは実際にタスクを開始し、それが最終的にmethodOneに信号を送ります
スレッド(B)アクションが完了するとシグナルを受け取ります
このコードは大丈夫ですか、それともまだ潜在的な問題が発生していますか?解決するためのより良い方法は何ですか?
ミーシャ
私は疑問に思っていました、それは正しいです:
オプション1
オプション2
なぜ?
java - オブジェクトまたはメソッドのJava同期メソッドロック?
同じクラスに2つの同期されたメソッドがあり、それぞれが異なる変数にアクセスしている場合、2つのスレッドがそれらの2つのメソッドに同時にアクセスできますか?ロックはオブジェクトで発生しますか、それとも同期メソッド内の変数と同じくらい具体的になりますか?
例:
x.addA(
2つのスレッドが)を実行しているクラスXの同じインスタンスに同時にアクセスできますx.addB()
か?
winapi - 同期されたキューを管理するための一連のWin32API関数はありますか?
いくつかのワーカースレッドと、ジョブを受け取るメインスレッドを持つプログラムがあります。メインスレッドで、ジョブを同期キューにキューに入れ、そこに座っているワーカースレッドをすべてキューで待機させたいと思います。キューに何かがある場合、残りの作業が別のジョブを待っている間に、ワーカーがキューからジョブをプルするようにします。
CreateMsgQueue(http://msdn.microsoft.com/en-us/library/ms885180.aspx)を見つけましたが、これはWindowsCEにのみ存在するようです。
私はこれを自分で書くことができることを知っていますが、何かがすでに存在している場合、私はそれを使用しないのはばかだと思います。
VisualStudio2005を使用してC++で開発しています。
どんな提案もありがたく受けました。
ありがとうリッチ
java - スレッドはJavaで一度に2つのロックでwait()を呼び出すことができます(6)
私はJavaのスレッドをいじって頭を悩ませていましたが(そうするのが最善の方法のようです)、synchronize、wait()、notify()で何が起こっているのかを理解しました。
一度に2つのリソースでwait()を実行する方法があるかどうか知りたいです。以下は、私が考えていることを完全には実行しないと思います(編集:通常のwhileループは、2つのリソースを解放することに集中するために、この例から除外されていることに注意してください):
この(非常に工夫された)場合、token2はtoken1が返されるまで保持され、token1はtoken2が返されるまで保持されます。目標は、token1とtoken2の両方を解放し、両方が使用可能になったら再開することです(token1.wait()を内部同期ループの外に移動することは私が得ているものではないことに注意してください)。
両方が利用可能かどうかをチェックするループは、この動作を実現するためにより適切かもしれませんが(これは、ダブルチェックロックのアイデアに近づいていますか?)、余分なリソースを消費します-これは単なる解決策であるため、私は決定的な解決策を求めていません私の好奇心を満たすために。
編集議論のために、ここでの2つのトークンは、スレッドが同時に使用する必要がある2つの異なるリソースを表し、他のいくつかのスレッドは両方を同時に必要とするということを言いましょう。
java - フィールド読み取りと揮発性の同期の違い
いくつかの同時実行のヒントを含む素敵な記事では、例が次の行に最適化されました。
私が正しく理解している場合、同期のポイントは、このスレッドによって読み取られる acct.balance の値が最新であること、および acct.balance 内のオブジェクトのフィールドへの保留中の書き込みもメイン メモリに書き込まれることを確認することです。 .
この例で少し考えさせられました: acct.balance (つまり、クラス Account のフィールド balance) を として宣言する方が効率的ではないでしょうvolatile
か? これはより効率的で、synchronize
acct.balance へのすべてのアクセスを節約し、acct
オブジェクト全体をロックしません。何か不足していますか?