![](/img/trans.png)
[英]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.