我不明白下面的代码片段。这是我从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);
}
这甚至不会编译...你不能最终变量.. – Selvin
@Selvin,我没有要求你编译,我问了解这个代码。你为什么要编译这个?我解释了上面的一切。我能知道,你为什么降级我的问题? –
**这是无效的java代码... **你有什么不明白的? – Selvin