第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正在運(yùn)行的方法將 null 分配給對象

使用正在運(yùn)行的方法將 null 分配給對象

守候你守候我 2022-05-21 16:41:37
我有一個方法,disconnectUser()除其他外,它在執(zhí)行結(jié)束時(shí)分配null給一個對象。userSession但是,在我提出邏輯時(shí)出現(xiàn)了一個假設(shè),其中 sayuserSession有一個正在運(yùn)行的方法,并且在它仍在執(zhí)行時(shí)被分配了一個空引用;JVM如何處理這種情況?FWIW 這里是一些上下文的代碼片段:public class A {    UserSession userSession;    /* Skipped irrelevant code    *-------------------------------    */    private void disconnectUser(){      //Runs an endless while-loop (it's for demonstration's sake)      userSession.runEndlessLoop();      userSession = null;    }}附錄:這是實(shí)現(xiàn)runEndlessLooppublic void runEndlessLoop(){    Executors.newSingleThreadExecutor().execute(() -> while(true){});}
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個贊

userSession是對對象的引用。您“分配”null給這個引用,而不是一個對象。所以你正在改變這個參考。它不會更改userSession以前引用/指向的對象。


讓我試著補(bǔ)充一下:如果這個對象的方法與程序的其余部分在同一個線程中運(yùn)行,則在此方法完成后引用將被更改,因此問題甚至不會出現(xiàn)。

相反,如果這個對象在不同的線程中起作用,那么......我剛剛測試了它:


public class UnreferencedTest {


    public static void main(String[] args) {

        UnreferencedTest u = new UnreferencedTest();

        u.createObject();

    }


    private void createObject() {


        Unreferenced obj = new Unreferenced();

        Thread t = new Thread(obj);//create new thread

        t.start();

        obj = null;     //remove only reference to object

        System.gc();    //ask GC to clean up


        try {

            Thread.sleep(10000); //wait a bit longer than other thread

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

    }


    private class Unreferenced implements Runnable {

        @Override

        public void run() {

            try {

                Thread.sleep(5000);

                areYouStillHere();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }


        private void areYouStillHere() {

            System.out.println("I'm still here!");

        }

    }


}

...甚至“要求” GC 清理未引用的對象。(不保證會?。┧坏却?5 秒,但仍在運(yùn)行。


希望有幫助!


查看完整回答
反對 回復(fù) 2022-05-21
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號