我正在使用Service开发音乐播放器应用程序。在服务中,我在新线程中处理所有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()是仅从此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;

我想念什么?谢谢。

最佳答案

尝试

volatile boolean shouldPlayNext=false;


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

10-08 14:11