問題タブ [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.

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

java - 2 つ以上のオブジェクトの同期 (Java)

次のようなコードがあります。

putInCacheは、1 秒あたり約 139 スレッドによって呼び出されます。これら 2 つのメソッドが と の両方cacheで同期することを確認できますFREESPACEか? また、checkFreeSpace()マルチスレッドセーフですか。つまり、一度にこのメソッドの呼び出しが 1 つだけであることを確認できますか? このコードの「マルチスレッドの安全性」を改善できますか?

0 投票する
5 に答える
1992 参照

c# - C#: 複数のスレッドが読み取るだけの場合、ArrayList を同期させる必要がありますか?

クラスで静的 ArrayList を使用して、更新不可能なデータベース フィールドに関する情報を格納しています。コンストラクターで一度初期化する予定です(コンストラクターのロックによって保護されたinitメソッド呼び出し)。その後、複数のスレッドが arraylist にフィールドが含まれているかどうかを確認します。この読み取りアクセスを何らかの方法で制御する必要はありますか? たとえば、ArrayList.Synchronized を呼び出します。

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

java - 同期リストにアクセスしようとするとスレッドが停止するのはなぜですか?

何らかの理由で、これの出力:

「GantryAgent: Try to print 'tasks'...」だけが出力されますが、次のメッセージは出力されません。同期されたリスト「タスク」にアクセスしようとすると、スレッドが何らかの形で「スタック」すると推測していますが、なぜこれが起こっているのかわかりません。

「タスク」は次のように宣言および初期化されました。

誰かが私が欠けているものを指摘できますか?

ああ!私は犯人を持っているのではないかと疑っています:

私のスケジューラ (これはエージェントの設計です) で、「タスク」が空かどうかを確認してから、doReturnToOriginalPos() を呼び出します。たぶん、これは他の方法がそれを変更する機会を得られないほど速く何度も起こっているのでしょうか?

それは確かに問題でした!スケジューラーで非常に高速に呼び出され続けたため、他の何も「タスク」にアクセスできませんでした。助けてくれてありがとう!

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

java - 同期について

このコードを考えると:

synchronizedキーワードがスレッドをオブジェクトのロックに依存させることを理解しています。質問:

a) メソッドが終了とマークされるとすぐにロックが解除されsynchronizedますか? または、スレッドのrun()メソッドが終了するとすぐに b) スレッドのいずれかがその名前を1 2他のスレッドの前に出力することを確認できますか?

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

java - Java: 同期 (オブジェクト) および RejectedExecutionException

私はこの問題を抱えています:

1つのオブジェクトにアクセスするスレッドがいくつかありますsynchronized(Object) { ... }

ただし、次の例外が発生する場合があります。

実行する:java.util.concurrent.RejectedExecutionException

なんで?そして、私はそれをどうすればよいですか?

ありがとう

0 投票する
6 に答える
31507 参照

java - 同期メソッドまたは春の @transactional を使用しますか?

メールの送信に使用するメソッドがあります。このメソッドをロックして、一度に 1 つのスレッドだけがアクセスできるようにし、残りのスレッドが同時にプールされるようにします。メソッドを同期するか、Spring @transactional PROPAGATION_REQUIRED を使用する必要がありますか?

私のサービス層で

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

java - synchronized(Object) { } 問題

synchronized() { method() } 880 個のスレッドが同時に実行されているというパフォーマンスの問題に遭遇しました。これにより、重大なパフォーマンスの問題が発生しました。

で待機しているスレッドに制限がある可能性はありsynchronized()ますか? 制限はどこで取得できますか?

もう 1 つの問題は、 に何を入れるのが最適かということですsynchronized( ? )。その変数にアクセスするクラスが異なるため、synchronized(this).

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

java - 同期句内で例外をスローすることの副作用?

同期句内から例外をスローすると、不明な副作用がありますか? ロックはどうなるの?

0 投票する
4 に答える
2514 参照

java - Javaのスレッド化されたステートマシン

変更を待機している状態でスレッドを保持する方法はありますか?つまり、何かが発生するまで待つことを意味します(varの変更、メソッドの呼び出しなど)。おそらく、イベントリスナー、または同期されたオブジェクト/メソッドを使用する必要があります。

このようなステートマシンの通常のアプローチ

ステートマシンの例

これは、シングルスレッド(およびGUIなし)アプリケーションで機能するdo {..} while(true)ループを使用しますが、スレッドでは使用できません..(少なくともすべてのスレッドステートマシンにコアを使用する必要があります) )。

したがって、プロセッサがタスクを消費することを避けるために、単純な(そして醜い)方法は「定期的なチェッカー」です。つまり、Sleepを追加することは、同期されたオブジェクトを定義し、スレッドSleepの代わりにwaitを使用することです。

例:

欠点は、同期を使用して複雑さを追加すること、またはTIME_CONST内で発生するものがすべて表示されないことです。

これを行うための他のアイデアを知りたいのですが、ありがとう!