當前位置:編程學習大全網 - 編程軟體 - Java中的ThreadLocal通常是在什麽情況下使用的

Java中的ThreadLocal通常是在什麽情況下使用的

ThreadLocal簡介

在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal為解決多線程程序的並發問題提供了壹種新的思路。使用這個工具類可以很簡潔地編寫出優美的多線程程序。當使用ThreadLocal維護變量時,ThreadLocal為每個使用該變量的線程提供獨立的變量副本,所以每壹個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應的副本。

多線程安全性解決方案

①進行同步控制synchronized ?效率降低 ? 並發變同步(串行)

②使用ThreadLocal 本地線程 ?每個線程壹個變量副本(各不相幹)

3.兩種線程安全方案的差異

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

4.擴展

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

綜上所述:兩種解決方案,ThreadLocal占用內存較大,但是速度快,而線程同步相對內存占用小,但是速度慢。如果在內存比較充足的情況,對並發部分的執行效率要求很高的話,那麽就是ThreadLocal登場的時候了。壹般情況下用同步機制還是居多的。

  • 上一篇:編程實現擴展桌面模式
  • 下一篇:未來科技城有抖音直播學習基地嗎
  • copyright 2024編程學習大全網