Runnable代码循环其动作

时间:2017-02-18 22:27:48

标签: java android multithreading android-asynctask runnable

我不明白下面的代码段。这是我从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);
    }

1 个答案:

答案 0 :(得分:1)

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