問題:驗證HashMap非線程安全

使用兩個線程對HashMap進行put操作,查看所有元素的key和value是否都相等。

final HashMap<String, String> firstHashMap = new HashMap<String, String>();
Thread t1=new Thread(){
    public void run() {
        for(int i=0;i<25;i++){
            firstHashMap.put(String.valueOf(i), String.valueOf(i));
        }
    }
};
 
Thread t2=new Thread(){
    public void run() {
        for(int j=25;j<50;j++){
            firstHashMap.put(String.valueOf(j), String.valueOf(j));
        }
    }
};
 
t1.start();
t2.start();
//主線程休眠1秒鐘,以便t1和t2兩個線程將firstHashMap填裝完畢。
Thread.currentThread().sleep(1000);
for(int l=0;l<50;l++){
    //如果key和value不同,說明在兩個線程put的過程中出現異常。
    if(!String.valueOf(l).equals(firstHashMap.get(String.valueOf(l)))){
        System.err.println(String.valueOf(l)+":"+firstHashMap.get(String.valueOf(l)));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章