将线程发送到后台

时间:2012-10-27 11:06:46

标签: java multithreading

我正在尝试实现音乐播放器。 我写了一个从Thread扩展的类并覆盖了它的Start() - Method来播放随机歌曲。

播放一首歌有效,但我想将该线程发送到后台,这不起作用:

File file = new File("song.mp3");
PlayEngine plengine = new PlayEngine(); //This class extends from Thread

plengine.Play(file); //This just sets the file to play in a variable
plengine.Start(); //And this finally plays the file itself

System.out.println("Next task:"); // I don't get to this point. Only when the song has finished.

正如您在上面的代码中所看到的,我想在启动线程后立即转到打印行。

3 个答案:

答案 0 :(得分:6)

建议不要延长Thread - 改为PlayEngine实施Runnable,并覆盖run方法:

class PlayEngine implements Runnable {
    private final File file;

    PlayEngine(File file) {
        this.file = file;
    }

    @Override
    public void run() {
        //do your stuff here
        play(file);
    }
}

然后开始踏板:

PlayEngine plengine = new PlayEngine(file);
Thread t = new Thread(plengine);
t.start();
System.out.println("Next task:");

Next task应立即打印。在您的示例中,您似乎在主线程中调用长时间运行的方法play,这解释了为什么它不会立即返回。

答案 1 :(得分:2)

  

覆盖了Start()

我怀疑你覆盖Thread.start(),这将永远不会奏效。覆盖Thread.run()或提供您自己的Runnable实例到线程。

答案 2 :(得分:0)

我认为你应该首先打开日志PlayEngine的run方法。此外,您似乎已经在start方法(在主线程中运行)而不是run方法中编写了回放代码。要在后台完成播放,请将代码置于run方法的start中,方法是覆盖它。