[英]Can ArrayList be used for readonly purpose in multithreaded environment?
[英]Hashmaps used in multithreaded environment
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的地图中检查并获取一个通道,类似地,当channel关闭时,从两个地图中删除其对应的条目(即通道对象和测试对象),我应该使用并发哈希图还是应该使用HashMap
,然后在在add remove方法中,我还将使用count AtomicInteger
变量进行统计,该变量将递增和递减。
我的问题是在多线程环境中,即使我使用ConcurrentHashmap
,我是否也需要使方法同步,因为我将在一个方法中对两个映射进行一些操作。
是的,您需要在multi-threaded
环境中进行synchronization
。 如果您使用块级同步而不是方法级同步,那就更好了。
程式码片段:
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)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠。
因此,是的,即使您使用ConcurrentHashMap,您仍然可能需要进行syncronization
。
由于您需要同时操作两个地图,
使方法同步是更好的选择。
如果方法同步,则HashMap就足够了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.