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開發的工程師們,一定要注意線程安全這塊的知識,因為你寫的程序,肯定是處
於多線程環境下的,呵呵。