我正在開發一個Java Spring MVC項目,並且我很猶豫在Java Spring Bean中使用實例變量。我想問一些關於這個主題的問題。Java Spring Bean中的實例變量
我在我的Java Spring Bean中使用了一個實例變量,它的類型是String。
private String abc = "hell";
正如我們所知,Java Spring默認範圍是Singleton,它們是在項目啓動時構建的。它是單實例,我的實例變量必須是線程安全的。
我在bean的方法中使用了這個變量「abc」,當它們被多個線程到達時,它會損害每個線程數據的一致性嗎?
例如,線程1到達bean並將abc變量改爲「hello」。那時,線程1引用abc變量point「hell」或「hello」?我很困惑這個話題。
我使字符串ABC變量ThreadLocal
目的是提供每個線程持有自己的ABC variable.But我已閱讀,使用ThreadLocal
對象時出現據說它是固定在Tomcat.After 7.0版的Tomcat存儲器泄漏。
因爲每個線程擁有自己的變量,當他們回到這是由container.But管理線程池,恢復池的作業完成,ThreadLocal的對象不被破壞,它們造成內存泄漏。
此外,String對象是不可變的,所以在理論視圖中它是否會導致多線程問題?
是每個線程都擁有自己的字符串變量嗎?例如,線程1觸發並啓動方法調用,並創建單獨的字符串變量「abc」和線程2觸發器,然後創建新的字符串變量「abc」,並相互損害「abc」變量?
我真的很想知道這個用法的概念,並且很想學習答案。
我在一個方法中使用了ThreadLocal對象,並且此方法由JSP調用。方法的第一行從方法參數中取得ThreadLocal對象集的值。因此,「但是您需要非常小心地在每次請求後清除狀態。」我提供這個聲明,如果我理解正確,那麼沒問題。如果發生內存泄漏,我將爲servlet過濾器設置ThreadLocal對象。我是對吧? –