0

我正在使用Services 开发音乐播放器应用程序。在服务中,我MediaPlayer在一个新线程中处理所有功能。这是我的类,它实现Runnable

public class MusicPlayerThread implements Runnable {
    boolean shouldPlayNext=false;

 public void run {
    while(true) {
        if(shouldPlayNext)           //shouldPlayNext always is false
         //code to play next song
     }
 }

 public void playNext() {
    shouldPlayNext=true;            //although control reaches here..
 }
}

playNext()是一种只能从 this 外部调用的方法Thread

所以我试着这样做:

public void run {
    while(true) {
       if(getshouldPlayNext)       //code to play  next song
    }
}

synchronized public void playNext() {
shouldPlayNext=true;
}

synchronized public boolean getshouldPlayNext() {
return shouldPlayNext;
}

尽管如此,该run方法总是被认为shouldPlayNext是错误的。我什至尝试将变量声明为:

volatile boolean shouldPlayNext=false;

我错过了什么?谢谢。

4

1 回答 1

1

尝试

volatile boolean shouldPlayNext=false;

线程可以保留变量的缓存副本。因此,理论上,即使实际变量发生更改,线程也可以继续使用旧的缓存副本。volatile关键字使对所有线程可见的变量的读/写。

于 2013-08-13T15:02:01.263 回答