【发布时间】:2013-07-11 11:48:51
【问题描述】:
最近我在玩信号量和多线程,当我注意到数组列表发生了一些奇怪的事情时。更多详情:
我有一个带有单个私有 ArrayList 的类:
public class NewClass{
private ArrayList list = new ArrayList();
public void put(Object val){
list.add(val);
}
public void del(Object val){
list.remove(val);
}
}
从某个线程中,我正在尝试从中删除元素(在此之前不放置任何内容):
public class SomeClass {
public static void main(String[] args) throws InterruptedException {
new SomeClass();
}
public SomeClass() throws InterruptedException {
Thread tr2 = new Thread() {
@Override
public void run() {
NewClass nc = new NewClass();
for (int i = 0; i < 100; i++) {
nc.del(i);
}
}
};
tr2.start();
}
}
当线程开始工作时 - 我没有错误,没有异常等。而如果调试,我可以清楚地看到 list.indexOf(val);返回 -1 值 - 它实际上不存在,而是被“移除”。谁能解释这里发生了什么?
【问题讨论】:
-
你能否澄清这部分 虽然,如果调试,我可以清楚地看到,list.indexOf(val);返回 -1 值 - 它实际上不存在,而是被“移除”。谁能解释这里发生了什么?
-
你对这个项目的期望和你得到了什么
-
这里没有太多的多线程,只要
tr2启动,主线程就结束了。 -
您是否会在某个时候将任何内容添加到您的列表中?
-
并且没有并行线程访问您的列表!
标签: java multithreading arraylist