如何實現多執行緒同時讀寫hashmap

2021-03-04 05:26:14 字數 1962 閱讀 3238

1樓:

有2種辦法讓hashmap執行緒安全,分別如下: 方法一:通過collections.

synchronizedmap()返回乙個新的map,這個新的map就是執行緒安全的。 這個要求大家習慣基於介面程式設計,因為返回的並不是hashmap,而是乙個map的實現。 方法二:

重新改寫了hashmap,...

如何實現執行緒安全的hashmap

2樓:匿名使用者

有2種辦法讓hashmap執行緒安全,分別如下:

方法一:通過collections.synchronizedmap()返回乙個新的map,這個新的map就是執行緒安全的。

這個要求大家習慣基於介面程式設計,因為返回的並不是hashmap,而是乙個map的實現。

方法二:重新改寫了hashmap,具體的可以檢視java.util.concurrent.concurrenthashmap. 這個方法比方法一有了很大的改進。

3樓:匿名使用者

public class maptest catch (interruptedexception ex)

system.out.println(iterator.nextelement());}}

}).start();

new thread(new runnable() catch (interruptedexception ex)

system.out.println(iterator.nextelement());}}

}).start();}}

這是沒有異常**

public class maptest catch (interruptedexception ex)

system.out.println(iterator.next());}}

}).start();

new thread(new runnable() catch (interruptedexception ex)

system.out.println(iterator.next());}}

}).start();}}

這裡是有異常**,iterator 時產生異常的主要原因,iterator建立的時候會拿到建立時容器的容量,乙個整形資料。 讀取的時候就拿這個容量資料先去檢查是不是和當前實際容量相等,如果不相等就concurrentmodificationexception異常,相等就開始讀資料,所謂執行緒安全就是乙個執行緒在使用iterator 讀資料的時候,另外執行緒往裡加資料,結果就出現iterator 儲存的容器容量和當前實際容量不等了,就不安全了。

而在hashtable中使用了enumeration這個執行緒安全的物件,就是說在另外的執行緒裡加東西的時候他會知道當前容器已經改變,所以使用他是執行緒安全的。

如果樓主還不明白去開下源**就知道了。

4樓:匿名使用者

map m = collections.synchronizedmap(new hashmap());即可

5樓:匿名使用者

如果樓主只是要執行緒安全的功能的話..

可以考慮用

java.util.concurrent.concurrenthashmap類.這是乙個執行緒安全的hashmap類.

或者hashtable也行(注意大小寫)

莫非樓主是要仿照hashmap自創乙個執行緒安全的hashmap類?..

6樓:day忘不掉的痛

直接用hashtable,hashtable執行緒安全。

我一般都會hashmap凡是在乙個方法內部new並且不傳到方法外面的基本上可以用hashmap,執行緒不安全的時候用currenthashmap。

比如類屬性是map或者靜態屬性map而且會在不同的執行緒併發執行操作map時。

7樓:匿名使用者

hashtable不就可以嗎。

易語言多執行緒如何使用,易語言如何使用多執行緒,乙個指令碼控制多個視窗

版本 2 支援庫 ethread 程式來 集 視窗程自序集1 程式集變數 許可 證,整數bai 型.子程式 啟動du視窗 建立完畢zhi許可證 建立進dao入許可證 子程式 啟動視窗 將被銷毀 刪除進入許可證 許可證 子程式 按鈕1 被單擊 啟動執行緒 執行緒處理資料,子程式 執行緒處理資料 進入許...

java中多執行緒在多核cpu中是真的同時執行嗎

如果是單核cpu,在某個時間點只能執行乙個執行緒,但是多核cpu你可以理解為多個單核cpu,當然可以同時執行多個執行緒啦。多核心cpu在同一時刻真的能同時執行多個執行緒嗎?多核心cpu是真正意義上的多個物理cpu嗎?與超執行緒cpu在邏輯上模擬雙核不同,多核cpu每個核心都可以獨立執行乙個執行緒,是...

c 多執行緒程式設計要用到哪些庫?如何編譯這些庫

千萬別以為現在的c 沒有原生的多執行緒庫 openmp 是乙個多執行緒庫,不過他還需要編譯器的支援,好在現在絕大多數都已經支援 這個可能是目前最流行的原生多執行緒庫了 c 的標準頭process.h 太老的沒有,2002年後的基本都有 中有操作程序和執行環境的函式,能實現簡單的程序級或執行緒級並行操...