我有一個存儲在會話中的對象。在我的控制器,當用戶發送請求時,它同時執行以下代碼:儘管明確地將其設置爲空,但會話attrribute的引用不會爲null
正如我指出的,它同時執行,因此而控制研究仍是在循環中,用戶可以做一些其他的事情如,當用戶按下另一個按鈕,請求將被髮送到控制器,所述控制器執行以下操作:
MyObject obj = (MyObject) req.getSession().getAttribute("myObject");
obj = null;
我的期望是,該循環,直到一個新的結果是可用的將拋出NullPointerException
代碼。只有找到我們的不是。
那麼,爲什麼物體從另一個控制器的會話拉不null
儘管對象設置爲另一個控制器null
?
編輯:
在我當前的代碼,其實我試着做
req.getSession().setAttribute("myObject", null);
和
req.getSession().removeAttribute("myObject");
不過,這並沒有解決我的問題, while循環中的對象仍然沒有消失。
實現
對於那些誰就會得到這樣的困惑,我的問題的根源是我弄糊塗了對象是如何在Java中通過。我的問題很簡單,obj = null
只是將參考的obj
設置爲空,並且不是對象本身。
正如morgano指出的那樣,會話中的對象由執行while循環的線程在本地引用,所以req.getSession().setAttribute("myObject", null);
和req.getSession().removeAttribute("myObject");
不會導致對象變爲空值。這些只是基本上從會話中刪除對象的引用(因此最好使它成爲gc的候選對象,在我的情況下不會發生這種情況,因爲對象被長時間運行的http請求[while循環事件]本地引用)。 。
你可以發佈一些你的併發控制器代碼。 –
可以請downvoters解釋爲什麼downvote? – Bnrdo