Guoht__程序猴 2016-02-04 15:08 采纳率: 100%
浏览 1519
已采纳

在安卓中开启一个新线程,发现如下代码中if块是DeadCode?为什么,如何解决?

new Thread(){
public void run(){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(hasData < 100){
progressStatus = progressStatus + (int)(Math.random() * 10);
handler.sendEmptyMessage(0x123);
// if(hasData >= 100){
// Toast.makeText(MainActivity.this,"耗时任务已完成",1).show();
// }
}

        }
    }.start();
}
备注progressStatus和handler已经在上面声明了。
  • 写回答

3条回答 默认 最新

  • 林深 2016-02-04 15:20
    关注
     while(hasData < 100){
    progressStatus = progressStatus + (int)(Math.random() * 10);
    handler.sendEmptyMessage(0x123);
    // if(hasData >= 100){
    // Toast.makeText(MainActivity.this,"耗时任务已完成",1).show();
    // }
    }
    

    从这块代码分析可知,有几种情况:
    1.如果原先 hasData >= 100的话,根本就不会进入到这个while循环中,那么就不会执行if
    2.如果原先hasData < 100 , 那么会进入到while中,但是while中没有改变hasData值的方法,那么只会在while中死循环,永远不会执行if
    3.如果原先hasData < 100,那么会进入到while中,而且通过handler.sendEmptyMessage(0x123);发送的请求,会改变hasData的值,但是,由于handler的执行相比当前thread是异步的,其触发时机会存在不确定性,所以不知道hasData的值会是在while判断前改变还是在if判断钱改变,所以也会导致if里面的内容不起作用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换