Как проверить, просматривал ли посетитель рекламу в Google Adsense?

Просто другое объяснение. Рассмотрим этот пример ниже

public class Outer{
     public static void main(String[] args){
         Outer o = new Outer();
         o.m1();        
         o=null;
     }
     public void m1(){
         //int x = 10;
         class Inner{
             Thread t = new Thread(new Runnable(){
                 public void run(){
                     for(int i=0;i<10;i++){
                         try{
                             Thread.sleep(2000);                            
                         }catch(InterruptedException e){
                             //handle InterruptedException e
                         }
                         System.out.println("Thread t running");                             
                     }
                 }
             });
         }
         new Inner().t.start();
         System.out.println("m1 Completes");
    }
}

Здесь Выход будет

m1 Завершено

Резьба t работает

Работа потока t

]

Thread t running

................

Теперь метод m1 () завершается, и мы присваиваем ссылочную переменную o null, теперь объект Outer Class имеет право на GC, но объект Inner Class Object все еще существует, у которого есть (Has-A) связь с потоковым объектом, который запущен. Без существующего объекта Outer class нет возможности для существующего метода m1 (), и без существующего метода m1 () нет возможности создать свою локальную переменную, но если Inner Class Object использует локальную переменную метода m1 (), тогда все будет понятно .

Чтобы решить эту проблему, мы должны создать копию локальной переменной, а затем скопировать ее в кучу с помощью объекта класса Inner, что java делает только для конечной переменной, потому что они фактически не являются переменными, они похожи константы (все происходит во время компиляции не только во время выполнения).

0
задан Panpaper 1 March 2019 в 05:48
поделиться