Java中unsafe操作实例总结 Java中unsafe操作是Java无锁操作的基石,在无锁并发类中都少不了它们的身影,比如ConcurrentHashMap、ConcurrentLinkedQueue等都是由Unsafe类来实现的。Unsafe类提供了多种操作,包括compareAndSwap、putOrder等,以下是对Unsafe操作的详细介绍。 compareAndSwap操作 compareAndSwap操作是Unsafe类中最重要的操作之一,它可以实现原子操作,保证了多线程环境下的线程安全。compareAndSwap操作可以分为三步: 1. 获取obj对象中offset偏移值的当前值,假设为realVal 2. 比较realVal和expect,如果相同,则更新obj对象中offset偏移值的当前值为update 3. 如果不相同,则不更新 compareAndSwap操作可以应用于AtomicInteger、AtomicLong等原子变量的操作中,例如: public final int getAndAdd(int delta) { return unsafe.getAndAddInt(this, valueOffset, delta); } public final int getAndAddInt(Object var1, long var2, int var4) { int var5; do { var5 = this.getIntVolatile(var1, var2); } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); return var5; } putOrder操作 putOrder操作是Unsafe类中的另一个重要操作,它可以将obj对象中offset偏移值的当前值设置为value。putOrder操作可以用于数组操作,例如在ConcurrentHashMap中大量使用该操作。 public native void putOrderedInt(Object obj, long offset, int value); putOrder操作可以分为两步: 1. 将obj对象中offset偏移值的当前值设置为value 2. 保证其他线程对该值的可见性 putOrder操作可以应用于ConcurrentHashMap等并发集合类中,用于实现高效的数组操作。 Unsafe操作是Java无锁操作的基石,它提供了多种原子操作,例如compareAndSwap、putOrder等,可以应用于多种场景,例如原子变量、并发集合类等。
- 粉丝: 4
- 资源: 934
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助