私はラジオをJavaでコーディングしており、もちろんストリームを再生するためにスレッドを使用しています。スレッドのrunメソッドでshouldPlayという変数がtrueであるかどうかをチェックしていますプレーヤーを実行します。次に、変数をfalseに設定するpause()メソッドがあります。変数がfalseのときに自然にプレーヤを実行しないようにします。スレッド内のこのJavaループはなぜ機能しませんか?
class audiostream extends Thread {
private boolean shouldPlay = true;
@Override
public void run() {
while(true)
{
if(shouldPlay)
{
shouldPlay = false;
System.out.print("test");
}
}
}
public void pause() {
shouldPlay = false;
}
public void play() {
shouldPlay = true;
}
}
スレッドが最初に実行したときに何が起こるしたいことはあるが、それは(それがうまくありません)「test」を印刷する必要があります:私は、私は以下のことを設定したかの小さな例を作成しました。次にpause()を実行するとshouldPlayがfalseに設定され、 "test"が出力されなくなります。しかし、play()を呼び出すとshouldPlayがtrueに設定され、テストが再び印刷されます。問題はそれがこれをしていないということです。
時間の約1/100です。親スレッドを「ハング」しないように別のスレッドからplay()とpause()を呼び出し、私の子スレッドがwhileループでハングしていて、play()または親からpause()を呼び出すと、そのループのために変数は値を変更しませんか?それが事実なら、私は何をすべきか分からない!