2 ght957733257 ght957733257 于 2016.02.04 23:08 提问

在安卓中开启一个新线程,发现如下代码中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个回答

leilba
leilba   Rxr 2016.02.04 23: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里面的内容不起作用

caozhy
caozhy
接近 2 年之前 回复
devmiao
devmiao   Ds   Rxr 2016.02.05 07:24

while(hasData < 100)
所以>=100不可能发生

a774057695
a774057695   2016.02.05 10:53

逻辑错误,就像这样:
if(true) {
if(false) {
//Are you just kidding me?
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!