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ランキング
-
ftp 同時複数接続の負荷テスト...
-
アコーディオンメニューをアン...
-
tryの終了
-
switch文の中に、throws new Ex...
-
スレッド
-
ファイルの排他
-
Ajaxの実行速度と読み方について
-
onBlurとonFocusの処理順序につ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
-
変数の参照でエラーが出てしま...
-
VBA 同じ名前のオブジェクトを...
-
String型の日付(2005/11/25)の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Javaプログラムからポップアッ...
-
Tomcatのスレッドを破棄する方法
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
素数判定を再帰処理で
-
PHPでDB処理中にプログレスバー...
-
Javaアプリケーション実行の返...
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
switch文の中に、throws new Ex...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
JDBCでテーブルUPDATE後の再検...
-
SwingUtilities.invokeLater(ne...
おすすめ情報