2017-02-18 64 views
0

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

這甚至不會編譯...你不能最終變量.. – Selvin

+0

@Selvin,我沒有要求你編譯,我問了解這個代碼。你爲什麼要編譯這個?我解釋了上面的一切。我能知道,你爲什麼降級我的問題? –

+0

**這是無效的java代碼... **你有什麼不明白的? – Selvin

回答

1

Java反編譯的字節碼不適合程序員。不要把你的邏輯放在那裏。

相關問題