たとえば(無理やりな例ですが)、クラスが
private final boolean isReady[] = {false, false};
public void setIsReady(int index, boolean isReady) {
this.isReady[index] = isReady;
}
public void doTask(int index) throws Exception {
while (! isReady[index] ) {
Thread.sleep(1000);
}
doSomething();
}
のようなメンバとメソッドを持っていて、setIsReady() と doTask()
がそれぞれ別のスレッドから呼ばれるような場合、doTask() の中の
while ループはちゃんと抜け出す事が保証されますか?
(もちろん isReady[index] を true にセットするとして。)
isReady が配列ではなければ
private volatile boolean isReady = false;
としておけば安心できるのですが、配列の中身を明示的に volatile に宣言
出来ないようなので。(出来るのならばやり方を教えてください。)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
下の回答は全然自信ないので、
あくまで参考ということでお願いします。
スレッドは参照型の変数についても作業コピー持つんでしたっけ?
でも参照型変数のコピーといっても、参照アドレス自体はこの場合変わらないですし、
参照先の実体をコピーするはずもないでしょうし、
そう考えると、実は何も必要ない、のかも知れません。
No.1
- 回答日時:
volatile 宣言はできないので、synchronized を使って
変数の作業コピーが最新の値であることを保証します。
setIsReady のほかに getIsReady メソッドも定義して、
それらを synchronized して、
while (!getIsReady(index)) {
// ...
}
のように。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初級 引数に適用できません
-
レコード件数の表示
-
ArrayList の継承について(初...
-
メソッド宣言の戻り値の型にク...
-
Google Apps Script で getRang...
-
String.containsの反対機能はあ...
-
readLine()ではじめから読み直...
-
シェルスクリプトからのJavaメ...
-
C# asp.net HTMLタグのエスケ...
-
C++における、クラスのメモリイ...
-
メソッドの引数に指定されてい...
-
Double,Longをファイルに書き込み
-
contextってなんですか?
-
初歩的な質問です・・・
-
C# の ByVal と ByRef について
-
メソッドについて
-
動画の座標値をマウスクリック...
-
ASP.Net ObjectDataSource!
-
Java初心者です、エラーの意味...
-
エクセルVBAで、条件に一致する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
public static void main (Stri...
-
abstract と static を一緒に付...
-
Google Apps Script で getRang...
-
StringBufferからStringへキャ...
-
メソッド宣言の戻り値の型にク...
-
javaに"search"という関数 or ...
-
C# 点の描き方をおしえてくだ...
-
Java初心者です、エラーの意味...
-
なぜprotected overrideなのか
-
親の親のメソッドを呼ぶには?
-
C# でメソッドに送られてきたOb...
-
Javaの関数名が長い?
-
別クラスのmainメソッドの実行
-
[クラス名].[メソッド名].[メソ...
-
コマンドライン引数のチェック
-
contextってなんですか?
-
説明文書でのメソッド・変数の...
おすすめ情報