問題タブ [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.
objective-c - シンクロナイズド リターン オブジェクティブ-c
Xcode でこれを行うと、「コントロールが非 void 関数の終わりに達しました」という警告が返されます。
そのコードに問題はありますか?
java - 「同期」は本当に単なる構文糖ですか?
私はマルチスレッドが初めてで、同時に実行されているスレッドをインクリメントして変数を出力することにより、1〜10000の数字を出力するこのコードを書きました。
私が使用しているコードは次のとおりです。
これは機能します。出力を確認するテスト プログラムを作成しました。印刷された数字は、正確に 1 ~ 10000 の順序で表示されます。
私の質問は次のとおりです。それsynchronized
は構文糖衣にすぎないと聞いたことがあります。しかし、私はそれを使用せずに成功した結果を達成することはできないようです. 私は何が欠けていますか?
java - 2 つの同期メソッドが同時に実行されるか
クラスに 4 つのメソッド ( m1
、m2
、m3
およびm4
) があります。メソッドm1
、m2
およびメソッドm3
ですsynchronized
。t1
また、それぞれ、t2
、t3
および4 つのスレッドがありt4
ます。
メソッド (同期メソッド) にt1
アクセスする場合、アクセスメソッド (同期メソッド) を同時にスレッド化できますか? そうでない場合、t2 の状態はどうなるでしょうか?m1
t2
m2
java - Java volatile 修飾子と同期ブロック
複数のスレッドによってアクセスされるが、同期ブロック内でのみアクセスされる変数には、volatile 修飾子が必要ですか? そうでない場合、なぜですか?
java - 同期セクションはブロックされません!
昨日、非常に奇妙なことに気づきました。2 つのスレッドが、同じオブジェクトをロックしている 2 つの同期ブロックに同時に入っているようです。
関連するコードを含むクラス ( MyClass
) は次のようになります。
上記のクラスを実行しているアプリケーションのスレッド ダンプを作成しましたが、これを見て非常に驚きました。
(単純にするためにクラスとメソッドの名前を変更したので、ばかげた名前に混乱しないでください。)
スレッド http-8080-136 と http-8080-111 の両方が のロックを取得したようmyLock
です。これは、オブジェクト アドレスが同じであるため、同じオブジェクトです: 0x00007fd8a6b8c790
. Java Runtime Specification は、synchronized
キーワードについて次のように述べています。
同期ステートメントは、実行中のスレッドに代わって相互排他ロック (§17.1) を取得し、ブロックを実行してからロックを解放します。実行中のスレッドがロックを所有している間、他のスレッドはロックを取得できません。[ Java 言語仕様、14.19 ]
では、これはどのようにして可能になるのでしょうか?
スレッド ダンプには、ロックを「待機中」の別の 44 のスレッドがあります。スレッドが待機中の場合は、次のようになります。
php - Firefoxは同じページのリクエストを同期しますか?
Firefox3.6.6を使用しています。
index.php
次のコードで呼び出されたPHPスクリプトがあります。
2つのブラウザタブを開き、それぞれにURLをコピーしてから、各タブでEnterキーをすばやく押します。最初のタブは20秒強で完了します。2番目のタブは40秒強で完了します。
私はIEで同じ実験を行い、両方のスクリプトが互いに1秒以内、約20秒で完了します。
これは予想される動作ですか?これをテストする原因となった実際のスクリプトは、同期手順です。2回実行しようとすると、ブラウザをそこに置いて2回実行できるようになるまで待つのではなく、プロセスがすでに進行中であるというエラーを受け取るようにします。
これがFirefoxの動作方法である場合、ページが重複していること、およびリクエストを同時に実行するのではなくキューに入れる必要があることをどのように判断しますか?
ジャンクGET文字列を最後に置くことで、それをだますことができます。たとえばindex.php
、index.php?JUNK=1
両方とも約20秒で完了します。
java - lockObjectで同期することと、これをロックとして使用することの違いは何ですか?
同期方式と同期ブロックの違いはわかりますが、同期ブロック部分についてはよくわかりません。
私がこのコードを持っていると仮定して
この場合、 lockObjectを使用することとこれをロックとして使用することの違いは何ですか?それは私にも同じようです。
同期ブロックを使用する場合、どのオブジェクトをロックするかをどのように決定しますか?
java - 通知またはタイムアウトの待機(長いタイムアウト)終了を区別する方法は?
この待機宣言を持つ:
InterruptedException、またはタイムアウトによって終了する可能性があります。または、別のスレッドで Notify/NotifyAll メソッドが呼び出されたため、例外をキャッチするのは簡単ですが...
終了の原因がタイムアウトか通知かを知る方法はありますか?
編集:
これはうまくいくかもしれないトリッキーな方法です(私は好きではありませんが)
java - 同期リストの使用
キーワードを使用するのはこれが初めてsynchronized
なので、正確にどのように機能するかはまだわかりません。複数のスレッドからアクセスしたいリストがあるので、次のようにします。
players.add()
ここで、 と同時に呼び出していないことを確認したいplayers.get()
ので、同期ステートメントを使用する必要があると思います (メソッド A と B は同時に呼び出すことができます)。
これは正しい手順ですか?そうでない場合、代わりに何をすべきですか?
java - メソッドで同期された Java が機能していませんか?
メソッドの同期を使用して、アトミック変数 (java.util.concurrent.atomic パッケージ) と比較して、Java マルチスレッドを実験しています。
以下にクラスを示します。
Atomic または Synchronized のいずれかを実行した結果は、変数 integer がスレッドセーフであることを示していません。たとえば、次のようになります。
結果の最後の 2 行は、2 つのスレッドがカウンター クラスの整数変数の同じ値にアクセスしていたことを示しています。おそらく私はここで何かを逃していますか?
ありがとう!