如何使用Unsafe类方法
首先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类方法相关推荐
- Unsafe类方法详解
jdk11.0可以直接getUnsafe()获取到,jdk8是return null: jdk11: jdk1.8: 分配内存的方法:相当于C语言中的memoryAllocation分配内存的方法.C ...
- java unsafe cas_Java Unsafe CAS 小试
Unsafe 在 Java 标准库和框架中被大量使用,本文主要介绍如何使用 sun.misc.Unsafe 包实现 CAS 操作. Example public class UnsafeExample ...
- java unsafe park_Java中Unsafe类详解
http://www.cnblogs.com/mickole/articles/3757278.html Java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操 ...
- JDK Unsafe类的使用与CAS原子特性
JDK Unsafe类的使用与CAS原子特性 Java.util.concurrent.atomic包,其中包含了大量使用到Unsafe这个类 Java不能直接访问操作系统的底层,而是通过本地方法来访 ...
- Java JDK Unsafe
最近看java.util.concurrent.atomic包,发现其中大量的用到Unsafe这个类.就在网上查了一下这个类到底是来干嘛的.java不能直接访问操作系统底层,而是通过本地方法来访问.U ...
- Unsafe应用详解
本文章来源于:https://github.com/Zeb-D/my-review ,请star 强力支持,你的支持,就是我的动力. [TOC] 背景 平时在啃并发库会发现一些底层的影子,虽然J.U. ...
- Java中Unsafe类详解
http://www.cnblogs.com/mickole/articles/3757278.html java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操 ...
- 想进大厂?50个多线程面试题,你会多少?(一)
最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让 ...
- 面试必会系列 - 1.5 Java 锁机制
本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes 面试必会系列专栏:https://blog.csdn.net/sinat_424833 ...
最新文章
- pup 流程控制语句(下)
- CentOS 6.7安装docker
- debian安装flash插件
- Http基本身份验证在Spring Security中如何工作?
- linux mysql 安装启动失败,Linux服务器一键安装包的mysql启动失败
- 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结
- 面向普通人的 PHP 加密
- word文档怎么开启护眼模式_开启手机护眼模式,我们的眼睛真的能免受伤害吗?...
- maven项目打包时生成dependency-reduced-pom.xml
- [Java] 蓝桥杯ALGO-85 算法训练 进制转换
- CVTE 2017 秋季校招笔试题回忆(C++后台)
- 【嵌入式工具】Keil下载,安装,配置教程大全
- 人工智能历史回眸:达特茅斯会议
- python模拟实现QQ邮箱登录
- mac pro M1(ARM)安装:ubuntu桌面版虚拟机(五)
- Nebula Graph 招募社区布道师
- 学习笔记(2):A110测试-测试课程申请22
- 电脑辐射,电脑辐射危害大 五妙招正确防辐射
- http协议中get和post的区别(转)
- 离散数学大作业——C++实现集合的基本运算