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 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable