我的循环很长。
在循环内部我有另一个循环来迭代(使用迭代器)在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 ,这是否会反映其他循环的变化?
(如果您想知道为什么我使用线程进行同步,这是为了远程资源和数据库交互,我需要这个循环在没有等待时间的情况下保持恒定和瞬间。)
答案 0 :(得分: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类有一个consructor UpdateThread(Test test,Iterator itr)。所以只需修改它以适合这个例子,或发布它我认为ki可以为你做。