我有一个很长的运行循环。
在循环内部,我有另一个循环来迭代(使用迭代器)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,这是否会反映另一个循环的变化?
(如果你想知道为什么我使用线程进行同步,这是为了远程资源和数据库交互,我需要这个循环是恒定的和即时的,没有等待时间)。