1 前言
控制多線程同步的方法很多,比如加同步鎖機制,但是這會帶來一定的性能消耗,因為要排隊機制,前段時間看了別人的代碼有個類(ThreadLocal<T> 泛型類)引起了我的注意。
2. 概念ThreadLocal
查看MSDN解釋:提供數據的線程本地存儲,其實通俗易懂的講就是一個變量在多個線程中實現多個拷貝(副本),因為多線程的機制,由於各個線程的變量是互不影響的,所以不用擔心變量引起了污染,各用各的不用擔心。
比如在數據庫連接操作或是ORM上下文操作的時候就可以實現多個線程的共用變量,把操作數據的上下文放在ThreadLocal<EFContext>,每個線程都有自己的上下文操作對象。由於asp.net 是多線程機制,所以各個請求互不影響,這個在工作單元模式中可以使用.
補充:ThreadLocal<T> 簡單易俗的說就是每個線程在范圍內(當前線程內部)可以保存相關數據,這個數據只對當前線程有效,比如 定義一個變量 int i=1, 線程A 操作i變量自增10次 那么i在該線程的值是10,B線程內自增5次,那么i在線程的值是5,兩個互不影響。這個類的主要作用是可以在線程范圍內共享變量值。