Java中的指针:Unsafe类
无锁的对象引用:AtomicReference
带有时间戳的对象引用:AtomicStampedReference
数组也能无锁:AtomicIntegerArray
让普通的变量也享受CAS操作带来的线程安全性 AtomicIntegerFieldUpdater
虽然AtomicIntegerFieldUpdater很好用,但是还是有几个注意事项:
第一,Updater只能修改它可见范围内的变量。因为Updater使用反射得到这个变量。如果变量不可见,就会出错。比如如果score申明为private,就是不可行的。
第二,为了确保变量被正确的读取,它必须是volatile类型的。如果我们原有代码中未申明这个类型,那么简单得申明一下就行,这不会引起什么问题。
第三,由于CAS操作会通过对象实例中的偏移量直接进行赋值,因此,它不支持static字段(Unsafe. objectFieldOffset()不支持静态变量)。