并发编程主要影响的操作的原子性和数据的可见性
-
操作的原子性 一个操作可能分成许多步骤,在单线程的情况下,这些步骤执行不会被影响。 并发情况下,如果没有保证操作的原子性,那么这些操作执行到一半会可能被其他线程所影响。这会导致1. 并发修改异常(ConcurrentModificationException)2. 数据不一致性3. 索引错位等问题。
-
数据的可见性 可见性指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。 由于每个线程都有一个自己的工作内存,工作内存和主内存之间需要通过 store 和 load 等进行交互。这就会导致一个线程修改变量值后没有及时刷到主存,另一个读取的变量值不是期望值的情况。
ArrayList并发实验
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8));
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
try {


