1. 程式人生 > 其它 >spring的bean是執行緒安全的嗎,以及一些簡單的ThreadLocal知識

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是如何解決迴圈依賴的問題
太麻煩了。。。。。。。。