繁体   English   中英

可运行的代码正在循环其操作

[英]Runnable code is looping its actions

我不明白下面的代码片段。 这是我从android的AsynchronousChannelGroupImpl类获取的代码段。 这些我不明白的事情。

1)var1被分配为final,但是我们在execute主体中对其进行了更改。

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

3)因此var1总是因为其最终指向固定位置。 它可以调用其run方法,因为run()方法位于其内存地址内。 但是,您每次创建的新PrivilegedAction对象均未定义且不一致。 我们不能说这个对象包含这么多的堆内存空间,因为那里的内部人员,它再次要求var1以var1.run()的方式运行其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);
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM