java的原子操作cas相关疑惑

java的原子操作cas相关疑惑

cas操作是由cpu底层的并发源语实现的,可以保证代码的原子性。
但是如果我有两个cas操作是并行的呢,就是两个cpu,同时执行比较替换。例如我下面的代码:


        new Thread(() -> {
            atomicInteger.compareAndSet(0, 1);
        }, "线程a").start();

        new Thread(() -> {
            atomicInteger.compareAndSet(0, 2);
        }, "线程b").start();

假设我的两个线程是并行,并且在同一时刻执行cas操作,确实是原子性不可中断的,但是如果是同时发生呢,这样到底谁成功,谁失败呢?

还是说cas的原子性还保证了在替换的同时只有一个线程可以操作;还是有啥子其他的原因。