首先Unsafe类是不建议被使用的,因为他面向底层,可能在每一代jdk版本中发生变化,除非你有把握在在每一次升级jdk时维护你的项目

Unsafe是作为单例而存在的,当我们尝试调用getUnsafe方法时,会报安全错误,这是由于双亲加载机制导致的。通常我们可以通过反射来绕过这些检测

在如下代码中,我们通过反射获取到了Unsafe类的实例,Unsafe类中的方法往往都是通过偏移量来操作对象的,我们可以看到,我们定义了Thread对象,并且通过objectFieldOffset获取其偏移量,在test()方法中,通过CAS来将其置换,成功的使用了Unsafe中的方法

public class UnsafeTest {private volatile Thread runner;private static final long runnerOffset;private static final Unsafe UNSAFE;static {try {Field f = Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);UNSAFE = (Unsafe) f.get(null);//UNSAFE = sun.misc.Unsafe.getUnsafe();Class<?> k = UnsafeTest.class;runnerOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("runner"));} catch (Exception e) {throw new Error(e);}}public void test(){UNSAFE.compareAndSwapObject(this, runnerOffset,null, Thread.currentThread());}public void print(){System.out.println(runner);}public static void main(String[] args) {UnsafeTest unsafeTest = new UnsafeTest();unsafeTest.test();unsafeTest.print();}
}

如何使用Unsafe类方法相关推荐

  1. Unsafe类方法详解

    jdk11.0可以直接getUnsafe()获取到,jdk8是return null: jdk11: jdk1.8: 分配内存的方法:相当于C语言中的memoryAllocation分配内存的方法.C ...

  2. java unsafe cas_Java Unsafe CAS 小试

    Unsafe 在 Java 标准库和框架中被大量使用,本文主要介绍如何使用 sun.misc.Unsafe 包实现 CAS 操作. Example public class UnsafeExample ...

  3. java unsafe park_Java中Unsafe类详解

    http://www.cnblogs.com/mickole/articles/3757278.html Java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操 ...

  4. JDK Unsafe类的使用与CAS原子特性

    JDK Unsafe类的使用与CAS原子特性 Java.util.concurrent.atomic包,其中包含了大量使用到Unsafe这个类 Java不能直接访问操作系统的底层,而是通过本地方法来访 ...

  5. Java JDK Unsafe

    最近看java.util.concurrent.atomic包,发现其中大量的用到Unsafe这个类.就在网上查了一下这个类到底是来干嘛的.java不能直接访问操作系统底层,而是通过本地方法来访问.U ...

  6. Unsafe应用详解

    本文章来源于:https://github.com/Zeb-D/my-review ,请star 强力支持,你的支持,就是我的动力. [TOC] 背景 平时在啃并发库会发现一些底层的影子,虽然J.U. ...

  7. Java中Unsafe类详解

    http://www.cnblogs.com/mickole/articles/3757278.html java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操 ...

  8. 想进大厂?50个多线程面试题,你会多少?(一)

    最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让 ...

  9. 面试必会系列 - 1.5 Java 锁机制

    本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes 面试必会系列专栏:https://blog.csdn.net/sinat_424833 ...

最新文章

  1. pup 流程控制语句(下)
  2. CentOS 6.7安装docker
  3. debian安装flash插件
  4. Http基本身份验证在Spring Security中如何工作?
  5. linux mysql 安装启动失败,Linux服务器一键安装包的mysql启动失败
  6. 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结
  7. 面向普通人的 PHP 加密
  8. word文档怎么开启护眼模式_开启手机护眼模式,我们的眼睛真的能免受伤害吗?...
  9. maven项目打包时生成dependency-reduced-pom.xml
  10. [Java] 蓝桥杯ALGO-85 算法训练 进制转换
  11. CVTE 2017 秋季校招笔试题回忆(C++后台)
  12. 【嵌入式工具】Keil下载,安装,配置教程大全
  13. 人工智能历史回眸:达特茅斯会议
  14. python模拟实现QQ邮箱登录
  15. mac pro M1(ARM)安装:ubuntu桌面版虚拟机(五)
  16. Nebula Graph 招募社区布道师
  17. 学习笔记(2):A110测试-测试课程申请22
  18. 电脑辐射,电脑辐射危害大 五妙招正确防辐射
  19. http协议中get和post的区别(转)
  20. 离散数学大作业——C++实现集合的基本运算

热门文章

  1. PS因为没有足够的RAM。
  2. 海鲜店多种盈利方案,一招教你如何解决客户流失的问题
  3. Android Studio调试工具总结
  4. python的set函数用法——获取不重复的集合
  5. 用深度学习玩图像的七重关卡
  6. js随机数方法 random()
  7. CANOPEN使用心得1-cia301、cia402简单提要
  8. 《JavaScript:The Good Parts(影印版)》克罗克福特
  9. 【31】核心易中期刊推荐——电子信息技术计算机技术
  10. python的所有基本函数图像_基本图像操作和处理(python)