level 5
不去明知山🉐
楼主
这是程序:
public class SafeTest {
static class ThreadSafe {
ArrayList<String> list = new ArrayList<>();
public final void method1(int loopNumber) {
for (int i = 0; i < loopNumber; i++) {
method2(list);
method3(list);
}
}
private void method2(ArrayList<String> list) {
list.add("1");
}
private void method3(ArrayList<String> list) {
list.remove(0);
}
}
static final int THREAD_NUMBER = 2;
static final int LOOP_NUMBER = 200;
public static void main(String[] args) {
ThreadSafe test = new ThreadSafe();
for (int i = 0; i < THREAD_NUMBER; i++) {
new Thread(() -> {
test.method1(LOOP_NUMBER);
},
"Thread" + i).start();
}
}
这是报错:
Exception in thread "Thread0" Exception in thread "Thread1" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.remove(ArrayList.java:507)
at org.example.SafeTest$ThreadSafe.method3(SafeTest.java:23)
at org.example.SafeTest$ThreadSafe.method1(SafeTest.java:16)
at org.example.SafeTest.lambda$main$0(SafeTest.java:36)
at java.lang.Thread.run(Thread.java:750)
java.lang.IndexOutOfBoundsException: Index: 0, Size: -1
at java.util.ArrayList.rangeCheck(ArrayList.java:659)
at java.util.ArrayList.remove(ArrayList.java:498)
at org.example.SafeTest$ThreadSafe.method3(SafeTest.java:23)
at org.example.SafeTest$ThreadSafe.method1(SafeTest.java:16)
at org.example.SafeTest.lambda$main$0(SafeTest.java:36)
at java.lang.Thread.run(Thread.java:750)
}
2026年03月14日 13点03分
1
public class SafeTest {
static class ThreadSafe {
ArrayList<String> list = new ArrayList<>();
public final void method1(int loopNumber) {
for (int i = 0; i < loopNumber; i++) {
method2(list);
method3(list);
}
}
private void method2(ArrayList<String> list) {
list.add("1");
}
private void method3(ArrayList<String> list) {
list.remove(0);
}
}
static final int THREAD_NUMBER = 2;
static final int LOOP_NUMBER = 200;
public static void main(String[] args) {
ThreadSafe test = new ThreadSafe();
for (int i = 0; i < THREAD_NUMBER; i++) {
new Thread(() -> {
test.method1(LOOP_NUMBER);
},
"Thread" + i).start();
}
}
这是报错:
Exception in thread "Thread0" Exception in thread "Thread1" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.remove(ArrayList.java:507)
at org.example.SafeTest$ThreadSafe.method3(SafeTest.java:23)
at org.example.SafeTest$ThreadSafe.method1(SafeTest.java:16)
at org.example.SafeTest.lambda$main$0(SafeTest.java:36)
at java.lang.Thread.run(Thread.java:750)
java.lang.IndexOutOfBoundsException: Index: 0, Size: -1
at java.util.ArrayList.rangeCheck(ArrayList.java:659)
at java.util.ArrayList.remove(ArrayList.java:498)
at org.example.SafeTest$ThreadSafe.method3(SafeTest.java:23)
at org.example.SafeTest$ThreadSafe.method1(SafeTest.java:16)
at org.example.SafeTest.lambda$main$0(SafeTest.java:36)
at java.lang.Thread.run(Thread.java:750)
}
