程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 基礎才是重中之重~線程安全的Hashtable

基礎才是重中之重~線程安全的Hashtable

編輯:C#入門知識

Hashtable 表示鍵/值對的集合,這些鍵/值對根據鍵的哈希代碼進行組織,它的Key不能為null,Value可以為null,這一點與Hashmap不同(本身不是線程安全的),對於Hashtable它是實現了IDictionary和ICollection接口的,它的key與value都是object類型的,不支持泛型,進行類型轉換成需要裝箱與拆箱(boxing,unboxing),這在性能肯定會有一些影響,所以,微軟這邊給出了支持泛型的鍵值對集合Dictionary,而Dictionary本身也不是線程安全的,我們需要對它加鎖(lock),才能避免多線程環境下產生的一些錯誤。

下面我們來看一下線程安全的Hashtable代碼片斷:

            Hashtable ht = Hashtable.Synchronized(, ]);

我們在來看一下Dictionary對象,可以使它基類提供的屬性,來實現它內部對象的線程安全  

            Dictionary<, > dic =  Dictionary<, > ((dic , 

下面我們來做一個實例,還是Dictionary的線程安全問題,我們有兩個線程,t1和t2,當我們為它加lock之後,t1純種在進行

 

            Dictionary<, > dic =  Dictionary<, >=  Thread(() => ((dic  ICollection).SyncRoot) 
, );
=  Thread(() => ((dic ] = ;
);

 

而對於Hashtable來說,如果希望對它進行寫加鎖,讀不加鎖,也可以通過lock在代碼段時去實現

                  Thread t1 =  Thread(() =>

OK,對於hashtable的線程安全這塊就說到這裡,最後和大家說一下,咱們做WEB開發的工程師們,一定要注意線程安全這塊的知識,因為你寫的程序,肯定是處

於多線程環境下的,呵呵。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved