A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package thread;

  2. import java.lang.reflect.Field;
  3. import sun.misc.Unsafe;
  4. public class Test {
  5.   
  6.          public static void main(String[] args) throws Exception {
  7.          System.out.println(A.flag);
  8.          new A();
  9.          new A();
  10.          System.out.println(A.flag);
  11.         }
  12.     }
  13. class A
  14. {
  15. public static final boolean flag=false;
  16. public A() throws Exception
  17. {
  18. if(getflag()) throw new Exception();       
  19. getUnsafe().putBooleanVolatile(A.class, getUnsafe().staticFieldOffset(A.class.getField("flag")), true);
  20. }
  21. private static final Unsafe getUnsafe()  
  22. {
  23. Unsafe unsafe=null;
  24. try{
  25. Field field= Unsafe.class.getDeclaredField("theUnsafe");
  26. field.setAccessible(true);
  27.   unsafe=(Unsafe)field.get(Unsafe.class);
  28.    }
  29. catch(Exception e){}
  30. return unsafe;
  31. }
  32. private static final boolean getflag()
  33. {
  34. boolean b = false;
  35.         try{
  36.        long start= getUnsafe().staticFieldOffset(A.class.getField("flag"));
  37.        b=getUnsafe().getBooleanVolatile(A.class, start);}
  38.         catch(Exception e){}
  39. return b;
  40. }
  41. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马