gpt4 book ai didi

java - 多线程环境下使用的Hashmap

转载 作者:行者123 更新时间:2023-12-01 13:41:05 25 4
gpt4 key购买 nike

public class Test {
private final Map<URI, Set<TestObject>> uriToTestObject = new HashMap<URI, Set<TestObject>>();
private final Map<Channel, TestObject> connToTestObject = new HashMap<Channel, TestObject>();

private static class TestObject {
private URI server;
private Channel channel;
private final long startNano = System.nanoTime();
private AtomicInteger count = new AtomicInteger(0);
}
}

这是一个我计划用作连接管理器的类。有两个映射,一个将具有连接详细信息的服务器 uri,即测试对象,另一个将具有到 TestObject 的 channel 。即连接条目详细信息,当创建连接时,然后根据需要在两个映射中放入 channel 测试对象和服务器 uri,当给出另一个请求时,首先在映射中检查该服务器 uri 并获取 channel ,类似地,当 channel 关闭时,从两个映射中删除映射及其相应的条目,即 channel 对象和测试对象,我应该使用并发 HashMap 还是应该使用 HashMap然后同步添加删除方法,我也将使用 count AtomicInteger用于统计目的的变量,它将递增和递减。

我的问题是在多线程环境中,即使我使用ConcurrentHashmap,我是否需要使我的方法同步,因为我将用一种方法在两个 map 上执行一些操作。

最佳答案

是的,您需要在多线程环境中进行同步。如果您使用 block 级同步而不是方法级同步,那就更好了。

代码片段:

Object lock = new Object();

void method1(){
synchronized(lock){
//do your operation on hash map
}
}

void method2(){
synchronized(lock){
//do your operation on hash map
}
}

关于ConcurrentHashMap

Retrieval operations (including get) generally do not block, so may overlap with update operations (including put and remove).

所以,是的,即使您使用 ConcurrentHashMap,您仍然可能需要同步 .

关于java - 多线程环境下使用的Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770916/

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