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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • user2341923

[ThreadStatic] 被設計成特性, ThreadLocal<T> 被設計成泛型,為什么會有這兩種設計方案呢 ?誰能告訴我他們的優缺點各是什么?是不是泛型的方式更好一點?

回答區

  • Sanjeev

[ThreadStatic] 背后的運作思路是為每個線程都copy一份變量的一個副本,參考如下代碼:

class?Program{[ThreadStatic]static?int?value?=?10;static?void?Main(string[]?args){value?=?25;Task?t1?=?Task.Run(()?=>{value++;Console.WriteLine("T1:?"?+?value);});Task?t2?=?Task.Run(()?=>{value++;Console.WriteLine("T2:?"?+?value);});Task?t3?=?Task.Run(()?=>{value++;Console.WriteLine("T3:?"?+?value);});Console.WriteLine("Main?Thread?:?"?+?value);Task.WaitAll(t1,?t2,?t3);Console.ReadKey();}}

從上面的代碼片段可以看出:每個線程都有一個 value 的初始化副本,除了創建它的主線程。

如果你想對所有線程一視同仁或者有自己的初始化邏輯,這時候就可以用 ThreadLocal 了。

  • marai

ThreadStatic 只會在創建它的線程中保留賦值,而 ThreadLocal 會將此賦值保留在所有線程中,比如我的簡單測試代碼。

class?Program{public?static?ThreadLocal<int>?_threadlocal?=?new?ThreadLocal<int>(()?=>?10);public?static?void?Main(){new?Thread(()?=>{Console.WriteLine("First?Thread:?{0}",?_threadlocal.Value);}).Start();new?Thread(()?=>{Console.WriteLine("Second?Thread:?{0}",?_threadlocal.Value);}).Start();Console.ReadKey();}}

點評區

個人感覺 ThreadStatic 和 ThreadLocal 相比,前者算是一個簡單粗暴的版本,同時在用 ThreadStatic 時也要了解容易踩到的坑,比如 Sanjeev 大佬的例子中所述:value = 10 只會在創建它的線程中被保留,在其他線程中會被默認為初始值,如:value=0。

如果你想高度的定制化,可以采用 ThreadLocal ,畢竟你看那些鏈式跟蹤的框架都少不了它的蹤影。

總結

以上是生活随笔為你收集整理的NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?的全部內容,希望文章能夠幫你解決所遇到的問題。

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