public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
list.add(1);
new Thread(() -> {
list.remove(0);
}).start();
}
}
}
搞不懂为什么会样子,按理说没创建一个线程之前已经加上1了呀。即使夸张一点儿创建了10个线程,这十个线程还没来得及执行,但是下一次执行循环的时候,也已经add了11个1了呀?
改成用迭代器删除,list在做批量或者多次删除的时候需要用迭代器,ArrayList循环删除还可以从末端开始删除。否则会出现由于位置、长度重算造成的异常
new Thread(() -> {
Iterator<Integer> iterator = list.iterator();
if(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
}).start();
for (int i = 0; i < 10000; i++)改成for (int i = 1000; i >= 0; i--)
你写的循环是可以到头的,到头了就没得移除了,电脑的计算速度1000次还不是一眨眼的事