色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

spring如何處理線程并發問題

錢浩然2年前74瀏覽0評論

spring如何處理線程并發問題?

Spring 使用 ThreadLocal 解決線程安全問題我們知道在一般情況下,只有無狀態的Bean才可以在多線程環境下共享,在Spring中,絕大部分 Bean 都可以聲明為 singleton 作用域。就是因為 Spring 對一些Bean(RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder 等)中非線程安全狀態采用 ThreadLocal 進行處理,讓它們也成為線程安全的狀態,因為有狀態的Bean 就可以在多線程中共享了。

ThreadLocal 和線程同步機制都是為了解決多線程中相同變量訪問沖突問題。同步機制中,通過對象的鎖機制保證同一時間只有一個線程訪問變量。這時該變量是多個線程共享的,使用同步機制要求程序慎密地分析什么時候對變量進行讀寫,什么時候需要鎖定某個對象,什么時候釋放對象鎖等繁雜的問題,程序設計和編寫難度相對較大。

ThreadLocal 則從另一個角度來解決多線程的并發訪問。ThreadLocal會為每一個線程提供一個獨立的變量副本,從而隔離了多個線程對數據的訪問沖突。因為每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,可以把不安全的變量封裝進 ThreadLocal。 由于 ThreadLocal中可以持有任何類型的對象,低版本 JDK 所提供的 get()返回的是 Object 對象,需要強制類型轉換。但 JDK5.0通過泛型很好的解決了這個問題,在一定程度地簡化ThreadLocal 的使用。

概括起來說,對于多線程資源共享的問題,同步機制采用了“以時間換空間”的方式,而 ThreadLocal 采用了“以空間換時間”的方式。前者僅提供一份變量,讓不同的線程排隊訪問,而后者為每一個線程都提供了一份變量,因此可以同時訪問而互不影響。

java多線程對象鎖,spring如何處理線程并發問題