For循环在一个线程内运行不正常

时间:2013-08-15 00:05:20

标签: java android arrays multithreading boolean

EDIT2:以下是代码和输出:

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

我的问题:为什么不打印第二个循环。?

1 个答案:

答案 0 :(得分:1)

如果两次调用myFunc(),或者在线程完成之前还有其他任何东西正在修改itemsIdsArray中的值,那么这会影响线程看到的内容。

如果希望效果类似于线程启动时值的“快照”,请在创建线程之前复制相关数组,并将本地副本传递给线程。