0

我有一个很长的运行循环。

在循环内部,我有另一个循环来迭代(使用迭代器)arrayList。

如果在遍历数组列表时满足条件,我将启动一个线程,同时将当前数组列表项和当前迭代器传递给它。

一些示例代码:

List<Test> testList = Collections.synchronizedList(new ArrayList<Test>());

//scanTests in a thread
while(scanTests) {
    for(Iterator<Test> itr = this.testList.iterator(); itr.hasNext();) {
        Test test = itr.next();
        if (test.closed == true && !test.inUpdateThread) {
            test.inUpdateThread = true;
            UpdateThread urt = new UpdateThread(test, itr);
            new Thread(urt).start();
        }
    }
}

//scanSomethingElse is in another thread
while (scanSomethingElse) {
    //manipulating testList 
}

如果在UpdateThread中满足条件,我想从testList中删除该项目,如下所示:

this.itr.remove();

我同时有另一个长时间运行的循环(在另一个单独的线程中),它在数组 List 上执行类似类型的处理(读取、写入等)。

我的问题是,如果在另一个循环中我正在迭代testList,这是否会反映另一个循环的变化?

(如果你想知道为什么我使用线程进行同步,这是为了远程资源和数据库交互,我需要这个循环是恒定的和即时的,没有等待时间)。

4

1 回答 1

0

你为什么不使用类似的东西:

while (true) {
    for (int i = 0;i < testList.size(); i++) {
        Test test = testList.get(i);
        if (test.closed == true && !test.inUpdateThread) {
            test.inUpdateThread = true;
            UpdateThread urt = new UpdateThread(some other constructor here);
            new Thread(urt).start();
        }; 

    };
};

//UpdateThread 类有一个构造函数 UpdateThread(Test test, Iterator itr)。所以只需修改它以适应这个例子,或者发布它我认为 ki 可以为你做。

于 2013-05-26T18:50:18.783 回答