多线程不能按预期工作,第二个线程在启动前等待第一个线程完成

时间:2017-02-12 16:15:18

标签: java android multithreading

我会简单地理解: 我想要的是我的两个线程同时启动而不是等待另一个完成它在开始之前必须做的事情。这是代码:

public class MyClass extends Activity{
    MediaPlayer player;
    int timeToPause;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);

        final Runnable updateLyrics = new Runnable() {
            @Override
            public void run() {
                while(player.isPlaying()){
                    if(inside(player.getCurrentPosition(), lyricsBegin[index], lyricsEnd[index])){
                        updateLyrics(lyrics[index]);
                    }
                }
            }
        };
        Runnable pausePlayer = new Runnable() {
            @Override
            public void run() {
                while(player.isPlaying()){
                    if(player.getCurrentPosition()/1000 == timeToPause){
                        player.pause();
                    }
                }
            }
        };
        Thread threadUpdate = new Thread(updateLyrics);
        Thread threadPause = new Thread(pausePlayer);
        threadUpdate.start();
        threadPause.start();
    }
}

函数inside(int current, int begin, int end)检查player的当前位置是否在beginend之间,timeToPauseplayer的特定时间{1}}暂停

1 个答案:

答案 0 :(得分:2)

你做不到。实际线程依赖于OS调度程序。

你可以做的是等待两者的状态都是RUNNABLE。之后,您可以使用同步标志让它们运行。原子变量或volatile应该可以解决问题