gpt4 book ai didi

java - Servlet 中的 ConcurrentHashMap

转载 作者:行者123 更新时间:2023-11-30 04:43:04 27 4
gpt4 key购买 nike

我有 ConcurrentHashMap 存储在 servlet 上下文中,映射中的数据同时更改,我知道 servlet 上下文不是线程安全的,但 ConcurrentHashMap 是(对于写作)。在这种情况下我应该使用同步构造吗?

 synchronized (context) {
ConcurrentHashMap messages =(ConcurrentHashMap)context.getAttribute("map");
String mes = messages.get("id"); // can be changed by another thread?
messages.put("id",mes +"changed by thread 1");
}

最佳答案

抱歉,但我没有看到问题所在。在本例中,“messages”是一个局部变量,每个线程都会有一个。您没有分享“消息”

当您从“上下文”读取时,可能会出现唯一的问题,因此,您只需要同步读取的内容

ConcurrentHashMap messages = null;
synchronized (context) {
ConcurrentHashMap messages =(ConcurrentHashMap)context.getAttribute("map");
}
String mes = messages.get("id"); // can be changed by another thread?
messages.put("id",mes +"changed by thread 1");

但是,最好的办法是避免这种情况。如何避免在阅读表单上下文时同步?很简单,您不能根据上下文编写或仅在初始化过程中这样做。

关于java - Servlet 中的 ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com