2017-02-18 62 views
0

我不明白下面的代码片段。这是我从AsynchronousChannelGroupImpl类中取出的代码片断。这些下面的东西我不明白。可运行代码循环其动作

1)var1被指定为final,但我们正在改变它的执行体。

2)var1指出从“new Runnable(){....}”创建的Runnable对象的内存地址。在Runnable对象的堆内存中,有run()方法。此run()方法使用AccessController类变量实现AccessControler的doPrivileged()方法,该方法包含新创建的PrivilegedAction对象和var3的内存地址作为其参数。但是这个新创建的PrivilegedAction对象再次调用其run()方法来调用var1的run()方法。这是循环的行动。

3)所以var1指向固定的位置总是因为它的最终。它可以调用它的run方法,因为run()方法在它的内存地址中。但是,每次创建的新PrivilegedAction对象都未定义并且一致。我们不能说这个对象包含了这么多的堆内存空间,因为那里有内存,它要求var1再次运行它的run()方法作为var1.run()

我想知道这段代码如何改变内存结构内部系统?我想从计算机体系结构的角度来了解它。

public final void execute(final Runnable var1) { 
     SecurityManager var2 = System.getSecurityManager(); 
     if(var2 != null) { 
      final AccessControlContext var3 = AccessController.getContext(); 
      var1 = new Runnable() { 
       public void run() { 
        AccessController.doPrivileged(new PrivilegedAction() { 
         public Void run() { 
          var1.run(); 
          return null; 
         } 
        }, var3); 
       } 
      }; 
     } 

     this.executeOnPooledThread(var1); 
    } 
+0

这甚至不会编译...你不能最终变量.. – Selvin

+0

@Selvin,我没有要求你编译,我问了解这个代码。你为什么要编译这个?我解释了上面的一切。我能知道,你为什么降级我的问题? –

+0

**这是无效的java代码... **你有什么不明白的? – Selvin

回答

1

Java反编译的字节码不适合程序员。不要把你的逻辑放在那里。

相关问题