`
liuInsect
  • 浏览: 132005 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

一种使用unsafe类修改变量值的方式

    博客分类:
  • java
阅读更多

本例子演示了另外一种修改变量值的方式,希望可以让读者从另外一个角度看待变量,欢迎大家讨论。

请看例子

 

package concurrentTest;

import java.lang.reflect.Field;

import sun.misc.Unsafe;

/**
 * jdk 提供了一个unsafe类来直接通过 内存地址来操作变量
 * 该例子演示了 另外一种变换 变量值的方式
* @Package concurrentTest 
* @author liukunyang
* @date 2013-12-11 下午02:36:23 
* @version V1.0
 */
public class UnsafeTest {

	private int i;
	
	public int getI() {
		return i;
	}

	public void setI(int i) {
		this.i = i;
	}
	/**
	 * @author liukunyang
	 * @date 2013-3-20	
	 * @param args
	 * @throws NoSuchFieldException 
	 * @throws SecurityException 
	 */
	public static void main(String[] args) throws SecurityException, NoSuchFieldException {
		// TODO Auto-generated method stub
		
		UnsafeTest ust = new UnsafeTest();
		/**
		 * 抛unsafe security异常,所以通过反射调用
		 * unsafe直接访问内存,所以不应在不受信用的类中访问
		 *     public static Unsafe getUnsafe() {
         *         Class cc = sun.reflect.Reflection.getCallerClass(2);
         *			  if (cc.getClassLoader() != null)
		 *             throw new SecurityException("Unsafe");
         *         return theUnsafe;
         *     }
		 * 
		 */
//		Unsafe unsafe = Unsafe.getUnsafe(); 
		
		Unsafe unsafe =null; 
	    try{ 
		    Class<?> clazz = Unsafe.class; 
	        Field f; 
	
			f = clazz.getDeclaredField("theUnsafe"); 
			f.setAccessible(true); 
	        unsafe = (Unsafe) f.get(clazz); 
	    } catch (IllegalAccessException e) { 
            e.printStackTrace(); 
        }catch (SecurityException e) { 
        	e.printStackTrace(); 
		} catch (NoSuchFieldException e) { 
			e.printStackTrace(); 
		} 
		
		Long offfset = unsafe.objectFieldOffset(UnsafeTest.class.getDeclaredField("i"));
		unsafe.putInt(ust, offfset, 2);//修改掉i变量的值。
		System.out.println( ust.getI() );
	}

}

 

0
0
分享到:
评论

相关推荐

    Java Unsafe类的使用.docx

    CAS算法的出现使得在不使用synchronize这种“悲观锁”依然可以实现数据的安全访问,CAS算法是指先读取要修改的变量值,对它进行计算,然后执行检查并更新这个步骤(更新前判断那个值是否是之前那个读到的值),检查...

    JDK8中sun.misc下UnSafe类源代码 UnSafe.java

    JDK8中sun.misc下UnSafe类源代码 UnSafe.java JDK8中sun.misc下UnSafe类源代码 UnSafe.java

    Java Unsafe类1

    Java Unsafe类1

    JDK8中sun.misc包下的UnSafe类

    JDK8中sun.misc包下的UnSafe类,想查看源码的就拿走,没积分的请与我联系!xtfggef@gmail.com

    CS使用Unsafe的方法向DLL传参

    CS使用Unsafe的方法向DLL传参 由一个实例开始: c++中函数声明如下: bool Test(float** arr,int rows,int cols); 这个函数在C#中怎么使用,直接传入single[,]出现错误”尝试读取或写入受保护的内存",那到底...

    一篇看懂Java中的Unsafe类

    在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过。所以花了点时间研究了下,下面这篇文章主要给大家介绍了关于Java中Unsafe类的相关资料,需要的朋友可以参考借鉴,下面来一起学习学习吧

    JDK Unsafe 源码注释

    并发作为 Java 中非常重要的一部分,其内部大量使用了 Unsafe 类,它为 java.util.concurrent 包中的类提供了底层支持。

    Java Unsafe类实现原理及测试代码

    过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的,官方文档也几乎没有。Oracle正在计划从Java 9中去掉Unsafe类,如果真是如此影响就太大了。 Unsafe类提供了以下这些功能: 一、内存管理。包括...

    简单谈一谈Java中的Unsafe类

    其实Java官方不推荐使用Unsafe类,因为官方认为,这个类别人很难正确使用,非正确使用会给JVM带来致命错误...但还是要会使用,下面这篇文章就来给大家简单的谈一谈关于Java中Unsafe类的相关资料,需要的朋友可以参考下

    unsafe:使用sun.misc.Unsafe的各种Java类

    unsafe-helper-包含一些简单的方法,这些方法使使用sun.misc.Unsafe更容易。 unsafe-collection-在ArrayList上建模的示例列表,该列表不存储对集合内对象的引用,而是直接将元素复制到列表中。 这有一些有趣的特性...

    golang利用unsafe操作未导出变量-Pointer使用详解

    主要给大家介绍了关于golang利用unsafe操作未导出变量-Pointer使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    netty-unsafe总结

    对Netty中的Unsafe做了简单的总结,构建自己的知识网!!!

    java魔法类:Unsafe应用

    java魔法类:Unsafe应用

    Java为什么会引入及如何使用Unsafe

    在Java9中,为了提高JVM的可维护性,Unsafe和许多其他的东西一起都被作为内部使用类隐藏起来了。但是究竟是什么取代Unsafe不得而知,个人推测会有不止一样来取代它,那么问题来了,到底为什么要使用Unsafe?  做...

    sun.misc.Unsafe源码

    sun.misc.Unsafe源码文件,需要学习的带走。希望能够帮助到大家。

    UnsafeAdapter:一个工具包,用于协助使用Java Unsafe类来分配和管理本地堆外内存块

    不安全适配器一个工具包,用于协助使用Java Unsafe类来分配和管理本地堆外内存块。

    JUC基石——Unsafe类

    我们经常在JUC包下的ConcurrentHashMap、Atomic开头的原子操作类、AQS以及LockSupport里面看到Unsafe类的身影,这个Unsafe类究竟是干什么的,本文可以带着读者一探究竟。 Java和C++、C语言的一个重要区别,就是Java...

    解决VS中This function or variable may be unsafe的安全检查错误.docx

    解决VS中This function or variable may be unsafe的安全检查错误

    Java并发编程学习之Unsafe类与LockSupport类源码详析

    主要给大家介绍了关于Java并发编程学习之Unsafe类与LockSupport类源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧

    Java 多线程与并发(8-26)-JUC原子类- CAS, Unsafe和原子类详解.pdf

    Java 多线程与并发(8_26)-JUC原子类_ CAS, Unsafe和原子类详解

Global site tag (gtag.js) - Google Analytics