日期:2014-05-20  浏览次数:20645 次

「线程」 为何停止以后就不能再启动了?
我写的一个刷新歌词的线程,提供了启动和停止功能,但是现在的情况是停止以后再启动,就会后报错
thread already started

上代码

/**
 * 歌词线程
 * 
 * @author 赵占涛 <a href="http://www.baisoft.net">百元软件工作室</a> zhaozhantao@21cn.com QQ:369880281
 *
 */
class LyricThread extends Thread{
/**
 * 正在播放否?
 */
private boolean playing;

/**
 * 停止歌词滚动
 */
public void stopScroll(){
playing = false;
}

@Override
public void run() {
while (playing){
lyricView.setTime(musicService.getCurrentPosition());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

/**
 * 开始滚动
 */
@Override
public void start(){
playing = true;
super.start();//错误报在了这一行**************************第一次没事,第二次就报错***************说已经started了,
}

}


------解决方案--------------------
每次重新new LyricThread().start()就可以了。
------解决方案--------------------
引用:
引用:

停过的线程是不能再start的。
你如果不想另外new线程对象的话,可以在run中不退出循环,只用playing字段的值决定是否做lyricView.setTime
看样子不new不行啊,不退出循环的话太浪费资源了吧

看线程使用的情况 如果做service可以不退出循环
------解决方案--------------------
貌似有一个唤醒线程的方法
------解决方案--------------------
你的线程已经被杀死了,当然不能重新启动啊。(run方法结束后, 线程自然死亡)
你要挂起线程的话,用wait,唤醒用notify或notifyAll
------解决方案--------------------
Run方法执行完了 线程就结束了