日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ThreadLocal是什么?

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThreadLocal是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal為解決多線程程序的并發問題提供了一種新的思路。使用這個工具類可以很簡潔地編寫出優美的多線程程序。

  當使用ThreadLocal維護變量時,ThreadLocal為每個使用該變量的線程提供獨立的變量副本,所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應的副本。

  從線程的角度看,目標變量就象是線程的本地變量,這也是類名中“Local”所要表達的意思。

  所以,在Java中編寫線程局部變量的代碼相對來說要笨拙一些,因此造成線程局部變量沒有在Java開發者中得到很好的普及。

ThreadLocal的接口方法

ThreadLocal類接口很簡單,只有4個方法,我們先來了解一下:

  • void set(Object value)設置當前線程的線程局部變量的值。
  • public Object get()該方法返回當前線程所對應的線程局部變量。
  • public void remove()將當前線程局部變量的值刪除,目的是為了減少內存的占用,該方法是JDK 5.0新增的方法。需要指出的是,當線程結束后,對應該線程的局部變量將自動被垃圾回收,所以顯式調用該方法清除線程的局部變量并不是必須的操作,但它可以加快內存回收的速度。
  • protected Object initialValue()返回該線程局部變量的初始值,該方法是一個protected的方法,顯然是為了讓子類覆蓋而設計的。這個方法是一個延遲調用方法,在線程第1次調用get()或set(Object)時才執行,并且僅執行1次。ThreadLocal中的缺省實現直接返回一個null。

  值得一提的是,在JDK5.0中,ThreadLocal已經支持泛型,該類的類名已經變為ThreadLocal<T>。API方法也相應進行了調整,新版本的API方法分別是void set(T value)、T get()以及T initialValue()。

  ThreadLocal是如何做到為每一個線程維護變量的副本的呢?其實實現的思路很簡單:在ThreadLocal類中有一個Map,用于存儲每一個線程的變量副本,Map中元素的鍵為線程對象,而值對應線程的變量副本。

?

?


Thread同步機制的比較

  ThreadLocal和線程同步機制相比有什么優勢呢?ThreadLocal和線程同步機制都是為了解決多線程中相同變量的訪問沖突問題。

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

  而ThreadLocal則從另一個角度來解決多線程的并發訪問。ThreadLocal會為每一個線程提供一個獨立的變量副本,從而隔離了多個線程對數據的訪問沖突。因為每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,可以把不安全的變量封裝進ThreadLocal。

  由于ThreadLocal中可以持有任何類型的對象,低版本JDK所提供的get()返回的是Object對象,需要強制類型轉換。但JDK 5.0通過泛型很好的解決了這個問題,在一定程度地簡化ThreadLocal的使用,代碼清單 9 2就使用了JDK 5.0新的ThreadLocal<T>版本。

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

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

  一般的Web應用劃分為展現層、服務層和持久層三個層次,在不同的層中編寫對應的邏輯,下層通過接口向上層開放功能調用。在一般情況下,從接收請求到返回響應所經過的所有程序調用都同屬于一個線程

  同一線程貫通三層這樣你就可以根據需要,將一些非線程安全的變量以ThreadLocal存放,在同一次請求響應的調用線程中,所有關聯的對象引用到的都是同一個變量。


而總結的博文,總結一句話就是一個是鎖機制進行時間換空間,一個是存儲拷貝進行空間換時間。

轉至http://blog.csdn.net/lufeng20/article/details/24314381

轉載于:https://www.cnblogs.com/xinxin-ting/p/7070826.html

總結

以上是生活随笔為你收集整理的ThreadLocal是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲天堂男人天堂 | 久久九九视频 | 成人黄色在线 | 国产特级淫片免费看 | 欧美美女性生活 | 欧美嫩草影院 | 国产做爰xxxⅹ高潮视频12p | 日韩一级二级三级 | 精品人妻一区二区免费 | 亚洲射吧| 亚洲日本香蕉视频 | 日本一区二区三区在线观看 | 日日射射 | 欧美精品日韩精品 | 国产91欧美 | 一级黄视频 | 两个人看的www视频免费完整版 | 久久久久久香蕉 | 老司机精品视频在线 | 9l视频自拍九色9l视频成人 | 激情第一页 | 老司机午夜在线 | 婷婷射| 日韩视频欧美视频 | 亚洲一一在线 | 狠狠爱五月婷婷 | av一二区| 久久久电影 | 嘿咻视频在线观看 | 操操操视频 | 欧美色欧美 | 日韩视频一区二区三区在线播放免费观看 | 偷偷操99| 一区二区三区美女视频 | 韩国三级丰满少妇高潮 | 九九九免费视频 | 亚洲乱视频 | 欧美aaa一级片 | 麻豆tube | 韩国一区二区视频 | 三级视频久久 | 亚洲综合射 | 亚洲天堂中文 | 男人日女人逼 | 亚洲精品91在线 | 国产精品中文字幕在线观看 | 校园春色自拍偷拍 | 精品久久久国产 | 欧美成人一二区 | 视频二区中文字幕 | 日韩有码在线视频 | 日韩五月天 | 中文无码一区二区三区在线观看 | 亚洲视频在线播放 | 三年中国片在线高清观看 | 天天躁日日躁狠狠很躁 | 精品国产一区在线 | 91成人福利在线 | 三级a毛片 | 本道综合精品 | 中文字幕一区二区三区四区 | 国产偷啪 | 亚洲精品福利网站 | 91免费视 | 亚洲综合日韩 | 色综合五月天 | 久操免费在线视频 | 成人123区| 欧美日韩一区二区三区四区 | 人人玩人人干 | 日本一区二区在线免费观看 | 欧美中文日韩 | 国产91沙发系列 | 明日叶三叶 | 18岁免费观看电视连续剧 | 在线成人中文字幕 | 哈利波特3在线观看免费版英文版 | 成人羞羞免费 | 麻豆一区二区三区精品视频 | 久久这里只有精品23 | 黄色一级片毛片 | 四虎国产成人永久精品免费 | 国产精品传媒一区二区 | 国产精品久久午夜夜伦鲁鲁 | 国产成人精品午夜福利Av免费 | 久久精品国产亚洲av久一一区 | 一级片大全 | 日韩女同一区二区三区 | 高清福利视频 | 国产精品自产拍高潮在线观看 | 国产成人免费观看视频 | 超碰97av在线 | 天堂男人在线 | 少妇被躁爽到高潮 | 精品国内自产拍在线观看视频 | 亚洲综合欧美综合 | 涩涩视频免费 | 欧美日韩视频一区二区 | 大陆av片 |