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

本文介绍了一个使用Java进行并发编程的示例,通过创建一个包含消息操作的类Message和继承自Thread的类MyThread,演示了如何在多线程环境下安全地操作ConcurrentHashMap。文章详细展示了addMessage、removeMessage、updateMessage和iteratorMessage等方法的实现,以及它们在多线程环境下的运行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com;

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

public class Message {
private ConcurrentHashMap<String,String> 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<Map.Entry<String,String>> iterator =  messageMap.entrySet().iterator();
   while (iterator.hasNext()){
       Map.Entry<String,String> 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<String,String> messageMap = new ConcurrentHashMap<String,String>();
    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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值