package com;

import sun.misc.Unsafe;

import java.lang.reflect.Field;

/**
* Created by yangyu on 16/11/24.
*/
public class TestUnsafe { public static void main(String[] args) {
Node node = new Node();
/**
* 通过CAS方法更新node的next属性
* 原子操作
*/
boolean flag = node.casNext(null,new Node());
System.out.println(flag);
} private static class Node{ volatile Node next; /**
* 使用Unsafe CAS方法
* @param cmp 目标值与cmp比较,如果相等就更新返回true;如果不相等就不更新返回false;
* @param val 需要更新的值;
* @return
*/
boolean casNext(Node cmp, Node val) {
/**
* compareAndSwapObject(Object var1, long var2, Object var3, Object var4)
* var1 操作的对象
* var2 操作的对象属性
* var3 var2与var3比较,相等才更新
* var4 更新值
*/
return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
} private static final sun.misc.Unsafe UNSAFE;
private static final long nextOffset; static {
try {
UNSAFE = getUnsafe();
Class<?> k = Node.class;
nextOffset = UNSAFE.objectFieldOffset
(k.getDeclaredField("next"));
} catch (Exception e) {
throw new Error(e);
}
} /**
* 获取Unsafe的方法
* 获取了以后就可以愉快的使用CAS啦
* @return
*/
public static Unsafe getUnsafe() {
try {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
return (Unsafe)f.get(null);
} catch (Exception e) {
return null;
}
}
}
}

最新文章

  1. [Protobuf] Mac系统下安装配置及简单使用
  2. 【工业串口和网络软件通讯平台(SuperIO)教程】五.二次开发图形显示界面
  3. Android 中的 WebView实现 Html5 标签网页加载
  4. 李洪强-C语言4-内存分析
  5. COCOS2D-X学习笔记(一)-----Node类的学习
  6. [Everyday Mathematics]20150121
  7. mysql将多张表COUNT的数据相加
  8. Highcharts可拖动式图表
  9. fedorea19安装redis
  10. 分页打印控制 摘自于网络:http://www.cnblogs.com/joinger/articles/1807517.html
  11. centos7架设vsftpd服务
  12. unity(Exploder插件)研究
  13. less是什么?直接用css好还是less好
  14. ubuntu 安装kafka
  15. Java使用quartz实现作业调度
  16. Windows下MySQL下载安装、配置与使用
  17. Git学习笔记05-撤销修改
  18. OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out
  19. 用原型封装一个操作DOM的例子
  20. CSS学习之盒子模型

热门文章

  1. piap.windows io 监测attilax总结
  2. JSP连接mysql数据库的重点
  3. Python的datetime
  4. 18.实现如下类之间的继承关系,并编写Music类来测试这些类。
  5. Netty学习五:Buffers
  6. 总结baiduTemplate和djangoTemplate的学习
  7. Jquery的基本架构
  8. java之内部类详解
  9. 本地MVC项目发布到IIS服务器
  10. Topology and Geometry in OpenCascade-Topology