Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可运行代码正在循环其操作_Java_Android_Multithreading_Android Asynctask_Runnable - Fatal编程技术网

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

Java 可运行代码正在循环其操作,java,android,multithreading,android-asynctask,runnable,Java,Android,Multithreading,Android Asynctask,Runnable,我不理解下面的代码片段。这是我从android的AsynchronousChannelGroupImpl类中获取的代码片段。下面这些事情我都不明白 1) var1被指定为final,但我们正在execute的主体中更改它 2) var1指向从“new Runnable(){….}”创建的Runnable对象的内存地址。在可运行对象的堆内存中,有一个run()方法。此run()方法使用AccessController类变量访问AccessController的doPrivileged()方法,该方

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

1) var1被指定为final,但我们正在execute的主体中更改它

2) var1指向从“new Runnable(){….}”创建的Runnable对象的内存地址。在可运行对象的堆内存中,有一个run()方法。此run()方法使用AccessController类变量访问AccessController的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反编译字节码不适用于程序员。不要把你的逻辑放在那里。

这甚至不会编译。。。您不能指定最终变量。@Selvin,我没有要求您编译,我要求您理解此代码。为什么要编译这个?我解释了上面的一切。我能知道吗,为什么你把我的问题降级了?它不是有效的java代码。。。你不明白什么?我说,这段代码来自Android类AsynchronousChannelGroupImpl反编译类。这个类是Android库的一部分,是100%有效的。不,它不是。。。我甚至发现了这个类代码,它是不同的。在android和openjdk中。同样,您提供的代码不是有效的java代码