spring的bean是線程安全的嗎,以及一些簡單的ThreadLocal知識


一。首先spring中的bean是線程不安全的

     spring的作用域大致可以分為兩種,一種是單例模式,一種是原型模式

  在單例模式中bean只會被ioc容器初始化一次(當然講到單例模式自然既有飽和餓漢的方法),但不管咋樣就是線程不安全的,因為ioc容器只初始化一次

將數據就加載到JVM內存當中,但是我們知道在多線程的情況下,用戶是會公用一個bean的應為是單例模式的,這樣就會產生線程不安全的問題,線程不安全

的最基本含義就是信息不共享,也即是說的數據不同步,這里就是我們的鎖就可以出來了,他就是來保證線程安全的,在線程獲取並操作數據的時候就會將

屬等棧中存儲的數據會加載到在即本地線程棧當中也就是ThreadLocal,

其中要明白ThreadLocal里面維護的是什么-----一個map 這就是線程安全了呀,

AtomicInteger 這個關鍵字就安全的。
 /**
     * The next hash code to be given out. Updated atomically. Starts at
     * zero.
     */
    private static AtomicInteger nextHashCode =
        new AtomicInteger();

    /**
     * The difference between successively generated hash codes - turns
     * implicit sequential thread-local IDs into near-optimally spread
     * multiplicative hash values for power-of-two-sized tables.
     */
    private static final int HASH_INCREMENT = 0x61c88647;

    /**
     * Returns the next hash code.
     */
    private static int nextHashCode() {
        //自增
        return nextHashCode.getAndAdd(HASH_INCREMENT);
    }
AtomicInteger  筆記記到這里就設計到鎖相關的知識了:
鎖其實是一件特別好理解的事情,就是一個人操作數據,期間不允許其他人對數據進行操作,這里的人就是指線程,人操作的東西就是數據,而對應數據的操作不過就是讀和寫,所以這里就產生了
讀讀,讀寫,寫寫。寫讀之間的間隔也就是枷鎖,其實線程間的鎖可以類比的數據庫當中也就是mysql中的讀寫鎖啥的,一個道理。其實鎖的本質就是一個阻攔的作用。

下來說spring是如何解決循環依賴的問題
太麻煩了。。。。。。。。























免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM