【发布时间】:2016-02-20 05:04:55
【问题描述】:
我正在学习 Java 多线程。我写了一小段代码并产生了一些我无法理解的输出。请帮忙解释一下。 下面贴出代码。
package com.java.learn;
import java.util.ArrayList;
import java.util.List;
public class ListTestWithMultiThread {
static final List<Integer> list = new ArrayList<Integer>();
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
list.add(Integer.valueOf(i));
}
System.out.println("List size at thread 0 : " + list.size());
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 101; i <= 200; i++) {
list.add(Integer.valueOf(i));
}
System.out.println("List size at thread 1 : " + list.size());
}
}).start();
}
}
各种运行中的一些 o/p: 线程 0 的列表大小:134 线程 1 的列表大小:200
Exception in thread "Thread-1" List size at thread 0 : 101
java.lang.ArrayIndexOutOfBoundsException: 17
at java.util.ArrayList.add(Unknown Source)
at com.java.learn.ListTestWithMultiThread$2.run(ListTestWithMultiThread.java:25)
at java.lang.Thread.run(Unknown Source)
List size at thread 0 : 106
Exception in thread "Thread-1" java.lang.ArrayIndexOutOfBoundsException: 58
at java.util.ArrayList.add(Unknown Source)
at com.java.learn.ListTestWithMultiThread$2.run(ListTestWithMultiThread.java:25)
at java.lang.Thread.run(Unknown Source)
【问题讨论】:
标签: java multithreading indexoutofboundsexception