如何不通过线程锁来实现线程安全的?我也看了Java源码,最后追到一个native方法。实在是看不懂原理呀。
public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this, valueOffset, expect, update); } public final native boolean compareAndSwapInt(Object paramObject, long paramLong, int paramInt1, int paramInt2);
我看书上说,是通过机器级指令(可能是汇编吧)来实现的操作的原子性。
AtomicInteger类compareAndSet通过原子操作实现了CAS操作,最底层基于汇编语言实现。
简单说一下原子操作的概念,“原子”代表最小的单位,所以原子操作可以看做最小的执行单位,该操作在执行完毕前不会被任何其他任务或事件打断。
CAS相比Synchronized,避免了锁的使用,总体性能比Synchronized高很多。
Sign in to make a reply
深蓝738
如何不通过线程锁来实现线程安全的?我也看了Java源码,最后追到一个native方法。实在是看不懂原理呀。