我正在尝试运行 2 个并发线程,其中一个不断将对象添加到列表中,另一个更新这些对象,并且也可能从列表中删除其中一些对象。我有一个ArrayList
用于我的方法和类的整个项目,所以现在很难改变它。
我环顾四周,发现了几种方法,但正如我所说,很难从ArrayList
. 我尝试使用synchronized
and notify()
for 将对象添加到列表wait()
中的方法,以及更改这些对象的方法,如果它们符合某些条件,则可能会删除它们。
现在,我已经想出了如何使用 a 来做到这一点CopyOnWriteArrayList
,但我想知道是否有可能使用ArrayList
它自己来模拟这个。这样我就不必编辑我的整个代码。
所以,基本上,我想做这样的事情,但是ArrayList
:
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class ListExample{
CopyOnWriteArrayList<MyObject> syncList;
public ListExample(){
syncList = new CopyOnWriteArrayList<MyObject>();
Thread thread1 = new Thread(){
public void run(){
synchronized (syncList){
for(int i = 0; i < 10; i++){
syncList.add(new MyObject(i));
}
}
}
};
Thread thread2 = new Thread(){
public void run(){
synchronized (syncList){
Iterator<MyObject> iterator = syncList.iterator();
while(iterator.hasNext()){
MyObject temp = iterator.next();
//this is just a sample list manipulation
if (temp.getID() > 3)
syncList.remove(temp);
System.out.println("Object ID: " + temp.getID() + " AND list size: " + syncList.size());
}
}
}
};
thread1.start();
thread2.start();
}
public static void main(String[] args){
new ListExample();
}
}
class MyObject{
private int ID;
public MyObject(int ID){
this.ID = ID;
}
public int getID(){
return ID;
}
public void setID(int ID){
this.ID = ID;
}
}
我也读过,Collections.synchronizedList(new ArrayList())
但我相信这将需要我更改我的代码,因为我有大量的方法可以ArrayList
作为参数。
任何指导将不胜感激,因为我没有想法。谢谢你。