我不明白下面的代码段。这是我从android的 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 :(得分:1)
Java反编译的字节代码不适合程序员。不要把你的逻辑放在那里。