atomic底层实现是基于无锁算法cas
生活随笔
收集整理的這篇文章主要介紹了
atomic底层实现是基于无锁算法cas
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
CAS 算法解析圖?
什么叫偏移量?
要用cas修改某個對象屬性的值->,首先要知道屬性在對象的內存空間的哪個位置,必須知道屬性的偏移量
UnsafeInstance.java
package com.dym.utils;import sun.misc.Unsafe;import java.lang.reflect.Field;public class UnsafeInstance {public static Unsafe reflectGetUnsafe() {try {Field field = Unsafe.class.getDeclaredField("theUnsafe");field.setAccessible(true);return (Unsafe) field.get(null);} catch (Exception e) {e.printStackTrace();}return null;} }AtomicStudentAgeUpdater.java
package com.dym.atomic;import com.dym.utils.UnsafeInstance; import org.openjdk.jol.info.ClassLayout; import sun.misc.Unsafe;public class AtomicStudentAgeUpdater {private String name ;private volatile int age;public AtomicStudentAgeUpdater(String name,int age){this.name = name;this.age = age;}public int getAge(){return this.age;}public static void main(String[] args) {AtomicStudentAgeUpdater updater = new AtomicStudentAgeUpdater("止小兮",18);System.out.println(ClassLayout.parseInstance(updater).toPrintable());updater.compareAndSwapAge(18,56);System.out.println("真實的止小兮年齡---"+updater.getAge());}private static final Unsafe unsafe = UnsafeInstance.reflectGetUnsafe();private static final long valueOffset;static {try {valueOffset = unsafe.objectFieldOffset(AtomicStudentAgeUpdater.class.getDeclaredField("age"));System.out.println("valueOffset:--->"+valueOffset);} catch (Exception e) {throw new Error(e);}}public void compareAndSwapAge(int old,int target){unsafe.compareAndSwapInt(this,valueOffset,old,target);}}總結
以上是生活随笔為你收集整理的atomic底层实现是基于无锁算法cas的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ForkJoinPool---ForkJ
- 下一篇: 99. 恢复二叉搜索树