经测试可以解决线程安全问题
public class Main {
public static volatile Boolean flag = false;
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
for (int i = 0; i < 100; i++) {
arrayList.add(Integer.toString(i));
}
Iterator i = arrayList.listIterator();
for (int x = 0; x < 100; x++) {
MyThread myThread = new MyThread(i, arrayList);
myThread.start();
}
flag = true;
}
static class MyThread extends Thread {
private Iterator i;
private ArrayList arrayList;
public MyThread(Iterator i, ArrayList arrayList) {
this.i = i;
this.arrayList = arrayList;
}
@Override
public void run() {
while (!flag) {
}
while (i.hasNext()) {
synchronized (flag) {
if (i.hasNext()) {
Object o = i.next();
System.out.println(currentThread().getName() + ":" + o + ":" + o.hashCode());
i.remove();
}
}
// try {
// sleep(10);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
}
运行结果:
Thread-59:89:1793
Thread-55:90:1815
Thread-63:91:1816
Thread-70:92:1817
Thread-75:93:1818
Thread-71:94:1819
Thread-74:95:1820
Thread-79:96:1821
Thread-83:97:1822
Thread-82:98:1823
Thread-86:99:1824
Process finished with exit code 0