Javaで複数のノード間でデータをやりとりするプログラムを書いています。
ノードは自分の持っているデータの情報を相手に渡し、その情報を元に相手は欲しいデータをこちらに要求するという形になっています。
流れとしては
相手から情報がくる>自分のもっているデータ情報と照らし合わせる>足りないデータを要求
といった感じなのですが、ここで
ほぼ同時に2つの相手から情報がくる>どちらも足りないデータで同じものをもっている
>2つの相手に同じデータを要求してしまう
という現象が起こっています。
データ要求の一連のプロセスは、情報をもらう相手ごとに別のインスタンスとして動いています。
片方がデータの要求をしている間にもう片方が自分のデータ情報を参照しないようにロックを
かければいいとは思うのですが、マルチスレッドの同期や排他制御に不慣れで
どうすればいいのかよくわかりません。
ソースがすでに膨大な量になっているためここには載せられず、わかりにくいかとは思いますが
ご助力をお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
A, B, Cの3つのノードがあって、BとCからAに対して持っている情報が送られて来るとします。
ノードAにはBの相手をするインスタンスAbとCの相手をするインスタンスAcがあって、AbとAcは同じロジックを別のスレッドで動かしているという想定でいいですか?1. AbがBから情報を受け取る
2. Aが持っていないデータを識別する
3. AbがBにデータを要求
4. AbがBからデータを受け取る
5. 受け取ったデータをAのデータ構造に追加する
基本的には、AbとAcの両方からアクセスできるロック用オブジェクト(lockとします)を1つ用意して上記の2~5の処理を
synchronized (lock) {
// 2~5の処理
}
のように囲んでしまえばいいです。1はsynchronizedの中に入れる必要はありません。
ただし、2~5の処理にかかる時間が長い場合にはもっと工夫しないと性能が低下する危険性があります。
ご回答ありがとうございます。
いろいろとやった結果、うまく動かせることができなかったので別の方法で無理やり動かしてしまいました。
今は時間がないのでこのままいきますが、また時間があるときにご回答を参考に改良したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(法律) 携帯電話会社に保管されている解約済み個人情報を消去したい 3 2022/08/13 23:23
- その他(セキュリティ) eKYC(Povo、メルカリ、ヤフオクなど)に重大なリスクが含まれていませんか?大丈夫でしょうか? 2 2023/02/04 17:40
- Android(アンドロイド) Googleのファミリーリンクの危険性に気付いてしまったのですが、皆さんの感想を教えてください! 2 2023/05/09 10:01
- ハッキング・フィッシング詐欺 スマホアプリのトラッキング 個人情報について 5 2023/03/31 08:16
- その他(セキュリティ) 匿名チャットアプリ トラッキング 個人情報について 1 2023/03/29 20:35
- その他(セキュリティ) 匿名チャットアプリでの知られたくない会話 個人情報について 1 2023/03/29 18:08
- その他(セキュリティ) 匿名チャットアプリのトラッキングについて。顔写真や個人情報の漏洩はあるのか。 2 2023/03/28 00:00
- その他(クラウドサービス・オンラインストレージ) 個人情報保護の件 1 2023/05/18 12:19
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
エクセルで1次近似をもとめたい
-
Excelのマクロでワードのテキス...
-
VBA 該当データがない時 ...
-
VBA 空白セルを削除ではない方...
-
C#にてDropDownListの値を動的...
-
マクロVBAについて
-
ミラーデータとは?
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
【VB】DataGridViewにテキスト...
-
Android携帯をUSBメモリ代わりに
-
【エクセル】測定時間がバラバ...
-
最大値、最小値
-
シリアル通信でのデータ受信
-
javaでDBからデータを取ってき...
-
シーケンサにパソコンからアク...
-
レコードセットのデータを1行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報