【发布时间】:2015-11-22 13:13:52
【问题描述】:
在每个线程中我想运行这种代码 初始化列表
final int initialSize = 2000;
final Random rand = new Random(System.currentTimeMillis());
Thread creationThread = new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < initialSize; j++) {
list.add(rand.nextInt(10000));
}
}
});
creationThread.start();
creationThread.join();
List<Thread> threads = new ArrayList<Thread>();
final int threadElemAmount = initialSize / numberOfThreads;
创建删除线程
for (int i = 0; i < numberOfThreads; i++) {
threads.add(new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < threadElemAmount; j++) {
list.remove((int) (list.size() - 1));
}
}
}));
}
但我遇到了ArrayIndexOutOfBoundsException 读写问题。如何避免这种情况?
【问题讨论】:
-
铸造需要什么?
-
为什么你使用循环而不使用变量 i?
-
@Rehman hm,听不懂你的意思。
-
使用迭代器。发生的情况是您的列表在一个线程中缩小,但其他线程继续在整个长度上运行。
-
什么是threadElemAmount 给详细一点,代码不清楚
标签: java multithreading arraylist thread-safety