![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
JDK1.5 WindowsXPです。
現在マルチスレッドを試しています。
A、B、C三つのスレッドがあります。
AはBというスレッドを作るメインスレッドです。
Bは、waitするスレッドです。
public final void run(){
while (true){
try {
//notifyが来るまで待機
waitForNotify();
//実際の処理
act();
//スレッド停止させるための割り込み例外
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
}
//割り込み受信の場合強制終了する
if (Thread.currentThread().isInterrupted()) {
break;
}
}
}
こんな感じです。
そしてCのスレッドがnotify()を実行します。
しかしnotify()を実行してもスレッドは起きません。
Bに、
public synchronized void notifyM() throws InterruptedException{
wait();
}
のようなメソッドを追加して、スレッドのインスタンスメソッドとして実行しても起きません。
notify()がJavaDOCなどを読んでも意味不明なため、
どのような使い方なら動くのか見当がつきませんので質問しました。
notify(スレッドB)みたいなら分かりいいんですが。
No.2ベストアンサー
- 回答日時:
最初の回答にもあるように、anObject.wait()はanObject.notify()で目を覚ます。
標準的な使い方は:
public class SomeData{
synchronized void get(){
if(空){
wait();
}
//データ取得処理
}
synchronized void put(){
//データ収納処理
notify();
}
}
これで、複数のスレッドが同じSomeDataオブジェクトにアクセスする場合を調停する。
No.1
- 回答日時:
まず、waitしているBスレッドは、どのオブジェクト(インスタンス)のモニターで待機しているでしょうか?
Cスレッドからnotify()を呼び出す場合、Bスレッドが待機しているのと同じオブジェクト(インスタンス)のnotify()を呼び出さねばなりません。
分かりにくくて、すみません。
ソースをそのまま全て載せていただければ、何かアドバイスできると思います。
ありがとうございます。
意味が分かりました。例えばLockオブジェクトを作って、
BでLockオブジェクトのwait()を呼び出して、CでLockオブジェクトnotify()を使うことで、動かすことが出来ました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- グループウェア slackについて取り急ぎ教えて頂きたいことがあります 2 2022/04/08 09:05
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- 2ちゃんねる ユーチューブで2ちゃんねるのスレッド紹介とかありますが、あれは2ちゃんねるだったときにつくられたスレ 1 2022/07/21 16:48
- 2ちゃんねる Server relocation is in progress.って何でしょうか 1 2022/10/27 19:46
- 倫理・人権 酔っ払いが他人にたくさん迷惑を掛けているので、もっとお酒規制を厳しくした方が良いのでは? 2 2022/04/11 11:54
- CPU・メモリ・マザーボード CPUについて 4 2022/07/09 13:41
- 政治 Yahoo知恵袋について質問です。あそこの政治経済のスレッドですが、ここはいったいあそこは何なのです 4 2022/06/18 22:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
ラジオボタンの選択判定
-
Javaでのデバッグコード削除
-
JavaScriptからJAVAクラスを呼...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インターフェースとトレイトっ...
-
変数名の付け方
-
【JAVA】与えられた金額を貨幣...
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
オブジェクトレベルとメタレベル
-
javascriptからjavaを呼び出したい
-
【sendkeysメソッドが動かずに...
-
エクセルのマクロでプリンタを...
-
Java初級 引数に適用できません
-
エクセル(複数インスタンス)...
-
進学校通ってたんですけど、眼...
-
private static という変数の修飾
-
Labelコントロールに数字を代入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
JavaScriptからJAVAクラスを呼...
-
Javaでのデバッグコード削除
-
WPF C#でF10のイベント取得方法...
-
数値の定数を付ける時
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
JavaでVBのDOEVENTSと同様の処...
-
JSP、サーブレットの初期処理
-
switch文の中に、throws new Ex...
-
ExcelVBA で文字列の特定の文字...
-
VBScriptでのWord印刷
-
ラジオボタンの選択判定
-
Javaアプリケーション実行の返...
-
C#で別スレッドの終了を知りたい
-
ftp 同時複数接続の負荷テスト...
-
ブラウザを閉じた後のサーバ側...
-
javaのプログラムが止まる
-
[Java] while(true)の意味
おすすめ情報