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
的通道,即连接条目细节,当创建连接然后根据需要在两个映射中放置通道testobject和服务器uri,当给另一个请求时,首先在地图中检查该服务器uri并获取一个通道,类似当通道关闭从两个地图中移除时,其对应的条目即通道对象和测试对象,我应该使用并发哈希映射还是应该使用{ {1}}然后同步添加删除方法,我也将使用count HashMap
变量进行统计,它将递增和递减。
我的问题是在多线程环境中我是否需要使我的方法同步,即使我使用AtomicInteger
,因为我会在一个方法中对两个地图进行一些操作。
答案 0 :(得分:2)
是的,您需要synchronization
环境中的multi-threaded
。
如果你使用块级同步而不是方法级同步,那就更好了。
代码段:
Object lock = new Object();
void method1(){
synchronized(lock){
//do your operation on hash map
}
}
void method2(){
synchronized(lock){
//do your operation on hash map
}
}
检索操作(包括get)一般不会阻塞,所以可能 与更新操作重叠(包括放置和删除)。
所以是的,即使你使用了ConcurrentHashMap,你仍然需要syncronization
。
答案 1 :(得分:-1)
由于您需要同时操作两张地图,
使方法同步是更好的选择
如果方法同步,HashMap就足够了