并发编程之sun.misc.Unsafe类
1、Unsafe知识点整理
2、代码:
package com.javabasic.unsafe; import java.lang.reflect.Field; import sun.misc.Unsafe; /**
* Unsafe如何使用
*
* 1、使用Unsafe.getUnsafe();获取对象会报错
* Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.SecurityException: Unsafe
at sun.misc.Unsafe.getUnsafe(Unsafe.java:90)
at com.javabasic.unsafe.UnsafeTest1.<clinit>(UnsafeTest1.java:13)
* 2、插卡源码,只要通过反射获取成员变量theUnsafe即可
* @author win7
*
*/
public class UnsafeTest2 { //获取Unsafe实例对象
static final Unsafe unsafe; //变量
private volatile long state=0; //记录变量state在类UnsafeTest1中的偏移量
static final long stateOffset; static {
//获取state变量在类UnsafeTest1中的偏移值
try {
//使用反射获取Unsafe的成员变量theUnsafe
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
unsafe = (Unsafe)field.get(null);
stateOffset = unsafe.objectFieldOffset(UnsafeTest2.class.getDeclaredField("state"));
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
throw new Error(e);
}
} public static void main(String[] args) {
UnsafeTest2 unsafeTest1 = new UnsafeTest2();
boolean compareAndSwapInt = unsafe.compareAndSwapInt(unsafeTest1, stateOffset, 0, 1);
System.out.println(compareAndSwapInt);
} }
3、eclipse中使用Unsafe编译报错
只需要去掉编译校验即可。
并发编程之sun.misc.Unsafe类的更多相关文章
- JDK 1.8 sun.misc.Unsafe类CAS底层实现
在java.util.concurrent包下面的很多类为了追求性能都采用了sun.misc.Unsafe类中的CAS操作,从而避免使用synchronized等加锁方式带来性能上的不足. 在sun. ...
- Java sun.misc.Unsafe类的学习笔记
Java未开源的Unsafe类 Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道. 获取Unsafe实体的方法 private static Unsafe getUnsa ...
- Java sun.misc.unsafe类
Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的.如果你想搞破坏,可以使用Unsafe这个类.这个类是属于sun.*API中的类,并且它不是J2SE中 ...
- Java的sun.misc.Unsafe类
阅读目录 前言 Unsafe类的作用 获取Unsafe对象 Unsafe类中的API 前言 以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了 ...
- sun.misc.unsafe类的使用
http://blog.csdn.net/fenglibing/article/details/17138079
- eclipse无法访问sun.misc.Unsafe类的解决办法
参考:https://www.cnblogs.com/duanxz/p/6090442.html
- sun.misc.Unsafe 详解
原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...
- java.util.concurrent各组件分析 一 sun.misc.Unsafe
java.util.concurrent各组件分析 一 sun.misc.Unsafe 说到concurrent包也叫并发包,该包下主要是线程操作,方便的进行并发编程,提到并发那么锁自然是不可缺少的, ...
- java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值
在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证 ...
随机推荐
- express+mysql实现简单的登录功能
登录页面图: node.js文件代码: const express=require("express"); const app=express(); const path=requ ...
- 《机器学习_07_01_svm_硬间隔支持向量机与SMO》
一.简介 支持向量机(svm)的想法与前面介绍的感知机模型类似,找一个超平面将正负样本分开,但svm的想法要更深入了一步,它要求正负样本中离超平面最近的点的距离要尽可能的大,所以svm模型建模可以分为 ...
- flask之session
''' session使用: session创建: (1)导入session from flask import session (2)设置secret_key密钥 app.secret_key='s ...
- 5.1 Go函数定义
1 Go函数定义 Go函数是指:一段具有独立功能的代码,然后可以在程序中其他地方多次调用. Go分为自定义函数,系统函数. 函数可以将一个大的工作拆解成小的任务. 函数对用户隐藏了细节. Golang ...
- form组件注册ajax登录auth认证及验证码
本项目采用django自带的数据库 项目文件 models.py from django.db import models from django.contrib.auth.models import ...
- mysql操作之二:fetchone与获取lastrowid
import mySQLdb conn = mySQLdb.connect(host='127.0.0.1',user='root',passwd='123456')cur = conn.cursor ...
- logback-spring.xml配置
logback-spring.xml配置 <?xml version="1.0" encoding="UTF-8"?> <configurat ...
- 1、JavaScript中的Cookie 用于存储 web 页面的用户信息。
总结:每个浏览器都有一定数量限制的cookie.每个浏览器中,每一个cookie都有一个path路径,指向请求访问的网页. -------------------------------------- ...
- 16-3 update语句
--打开和关闭查询窗口:ctrl+R --更新语句: --update 表名 set 列=新值,列2=新值2,... where 条件 --update语句,如果不加where条件,那么表示对表中所有 ...
- java链接redis
创建maven项目 2.导入jar包 <dependencies> <dependency> <groupId>redis.clients</groupId& ...