CurrentHashMap多个线程同时遍历与更新----验证CurrentHashMap是线程安全的

package com;

import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Message {
private ConcurrentHashMap messageMap ;

public Message(ConcurrentHashMap messageMap) {
    messageMap.put("1","1");
    messageMap.put("2","2");
    messageMap.put("3","3");
    this.messageMap = messageMap;
}

public void addMessage(){
    messageMap.put("4","4");
    System.out.println("add message");
}

public void removeMessage(){
    messageMap.remove("1");
    System.out.println("remove message");
}

public void updateMessage(){
    messageMap.put("2","22");
    System.out.println("update message");
}

public void iteratorMessage(){
   Iterator> iterator =  messageMap.entrySet().iterator();
   while (iterator.hasNext()){
       Map.Entry entry = iterator.next();
       System.out.println("遍历key为"+entry.getKey()+"value为"+entry.getValue());
       try {
           Thread.sleep(2000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
}

}

public class MyThread extends Thread{
private Message message;

public MyThread(Message message) {
    this.message = message;
}

@Override
public void run(){
    System.out.println(Thread.currentThread().getName()+"start");
    int i = 0;
    while (i++ < 5){
       message.addMessage();
       message.removeMessage();
       message.updateMessage();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    System.out.println(Thread.currentThread().getName()+"end");
}

public static void main(String[] args){
    ConcurrentHashMap messageMap = new ConcurrentHashMap();
    Message message = new Message(messageMap);
    Thread t1 = new MyThread(message);
    t1.start();
    message.iteratorMessage();
    //Thread t2 = new MyThread(message);
}

}
打印的结果为:
遍历key为1value为1
Thread-0start
add message
remove message
update message
add message
remove message
update message
遍历key为2value为22
add message
remove message
update message
遍历key为3value为3
add message
remove message
update message
遍历key为4value为4
add message
remove message
update message
Thread-0end

由此可见并不存在并发错误

你可能感兴趣的:(Java)