2 o19830015 o19830015 于 2013.08.15 13:57 提问

在线程中的for循环不允许

代码和输出:

private void myFunc()
{
    itemsIdsArray = new boolean[3];
    for(int i = 0;i<itemsIdsArray.length;i++){
        itemsIdsArray[i] = true;
    }

    for(int i = 0;i<itemsIdsArray.length;i++){
        if(itemsIdsArray[i]){
            Log.d(Global.TAG,"first in i: " + i);
        }
    }

    Thread timer = new Thread(){
        public void run(){
            try{
                for(int i = 0;i<itemsIdsArray.length;i++){
                    if(itemsIdsArray[i]){
                        Log.d(Global.TAG,"second in i: " + i);
                    }
                }
            }finally{

            }
        }
    };
    timer.start();
}

输出:

08-15 03:27:38.136: D/MyTag(22229): first in i: 0
08-15 03:27:38.136: D/MyTag(22229): first in i: 1
08-15 03:27:38.136: D/MyTag(22229): first in i: 2

为什么第二个循环没有输出?

2个回答

Jave_
Jave_   2013.08.15 14:16

从代码上来看执行并无问题,会两次都打印

o19830015
o19830015 boolean[] itemsIdsArray;是类中的一个field,myFunc()是在onclick按钮事件调用的
接近 5 年之前 回复
Jave_
Jave_ 还有就是你这段代码是放在哪里执行的
接近 5 年之前 回复
Jave_
Jave_ 你屏蔽第一次打印,看能不能看到第二次打印,我写代码测试了是可以
接近 5 年之前 回复
o19830015
o19830015 但是我确实看不见第二次打印啊
接近 5 年之前 回复
longhai326
longhai326   2013.08.19 15:42

Thread timer = new Thread(){
public void run(){
try{

            for(int i = 0;i<itemsIdsArray.length;i++){
                if(itemsIdsArray[i]){
                    Log.d(Global.TAG,"second in i: " + i);
                }
            }
         Thread.sleep(100);//加上这句试试看看行不行,try方法最好跟一个catch{}块
        }finally{

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