线程“死亡”后的反思

13 篇文章 0 订阅
3 篇文章 0 订阅

想法的产生

在写“别踩白块”的课设中,在游戏结束后弹出的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一个线程出来。

反思

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值