我不明白下面的代碼片段。這是我從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