Java中的sun.misc.Unsafe compareAndSwap putByte

从字面意思就可以看出, 这些接口在java世界, 是不安全的, 都是一些native (jni) 接口, 会直接修改内存中的值, 一旦指针弄错了, 结果是令人崩溃的.

本文只介绍几个常用的接口.

compareAndSwapInt

原型
/**
* Atomically update Java variable to x if it is currently
* holding expected.
* @return true if successful
*/
public final native boolean compareAndSwapInt(Object o, long offset, int expected, int x);
接口含义:
首先找出Object o在内存中的位置p, 然后偏移offset个字节, 设p+offset处的这个int值为y,
如果y == expected, 则执行赋值操作y = x, 返回true
如果y != expected, 则不执行赋值操作, 返回false
使用例子

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import sun.misc.Unsafe;
import java.lang.reflect.Field;
public class UnsafeExample {
   
    private final static Logger logger = LogManager.getLogger(UnsafeExample.class);
    static Unsafe U;
    int x = 2;

    static {
   
        Field f = null;
        try {
   
          /* 我所使用的jdk8上是theUnsafe */
            f = Unsafe.class.getDeclaredField("theUnsafe");
            f.setAccessible(true);
            U = (Unsafe) f.get(null)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值