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

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

上代码
Java code

/**
     * 歌词线程
     * 
     * @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不行啊,不退出循环的话太浪费资源了吧

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