线程“死亡”后的反思

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITloser_cartridge/article/details/52057924

想法的产生

在写“别踩白块”的课设中,在游戏结束后弹出的Dialog对话框中个,设置了一个重新开始游戏的按钮,在注册监听是发现需要启动的是一个原来启动过但是已经完成工作的一个线程(即是一个“死亡”的线程)。希望通过线程名重启该线程,实现重新开始的功能。如下代码所示:

Thread thread =  new Thread(){
    public void run(){
        while(flag){
            game.down(frame.mBolk);
            game.creatBlackBolk(frame.mBolk);
            try {
                Thread.sleep(500);
            } catch (Exception e) {
                e.printStackTrace();
            }
            delay();
        }
    }
};
thread.start();

当线程执行完成“死亡”后,我希望通过如下代码重启该线程(线程名在Game类中设置成静态了,上面代码没有体现只是太麻烦,所以就放一块了):

Game.thread.start();

结果

很明显,这是不可能实现的,所以我华丽丽的over了,最后还傻傻地去找原因。

原因

在线程的生命周期中,是没有死亡后重启这个概念的,当一个线程干完了自己该干的事情后就死了,就永远地消失了,不管通过什么方法,都无法重新唤醒,所以此处唯一的解决办法就是重新new一个线程出来。

反思

通过这个简单小问题,暴露出了很大的问题:线程的学习不够过关,且对线程的生命周期的理解还不够透彻。线程这一章感觉难度系数比较大,特别是后面的线程通信和线程调度。在今后的学习中增加精力和时间去学习线程这一部分,我感觉是非常有必要的。相信自已一定会学好的。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页