자바에서 라디오를 코딩 중이며 스트림을 재생할 수있는 스레드를 사용하고 있습니다. shouldPlay라는 변수가 true인지 확인하는 스레드의 실행 메소드에 while 루프가 있습니다. 플레이어를 실행합니다. 그런 다음 변수를 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;
}
}
스레드가 먼저 실행하면 내가 어떻게 할 것은, 그것은 (그것을 잘 수행) "테스트"를 인쇄해야합니다 : 나는 아래를 설정 한 방법의 작은 예제를 만들었습니다. 그런 다음 pause()를 실행하면 shouldPlay를 false로 설정하고 "test"를 출력하지 않아야합니다. 그러나 play()를 호출하면 shouldPlay를 true로 설정하고 테스트를 다시 인쇄해야합니다. 문제는 그것이 그렇게하지 않는다는 것입니다.
약 1/100의 시간이 걸립니다. 내가 여기에 문제가 있다고 가정하는 것은 play()와 pause()를 다른 스레드에서 "hang"하지 않고, 자식 스레드가 while 루프에 걸려 있고 play()를 호출하거나 pause() 부모로부터 변수는 그 루프 때문에 값을 변경하지 않습니까? 그렇다면 내가 무엇을해야하는지 모른다!