我有一个socket对象的映射,其中socket连接prams为键。 当请求来到服务类以获取带有密钥的套接字时,我从映射中获取连接的套接字对象并从套接字服务器请求时间以确保连接正常。如果删除套接字连接或者在回调方法(在另一个类中)中删除对象时遇到异常。我担心的是我必须在不同的类中共享对象的映射,然后我必须在不同的类中执行get(),put(),remove()。 我使用了同步HashMap并在上面提到的不同类中共享它。
public class ConnectionRegistry {
private static Object lock = new Object();
protected static final Map<ConnectionDetails, Connection> connectionMap = Collections
.synchronizedMap(new ConcurrentHashMap<>());
public ConnectionWrapper getWrapper(ConnectionDetails info){
synchronized (lock) {
Connection lsConnection = connectionMap.get(info);
if (lsConnection == null) {
// try to connect here to the socket server.
// Will get the response connected then put it in the map
}
}
if(lsConnection != null){
// request server time.
return //socket object
}else
// null
// This will get in different class and then try to update or delete object from map.
public static Map<ConnectionDetails, Connection> getConnectionMap() {
return connectionMap;
}
}
问题是当我获得具有相同连接细节的多个线程或线程阻塞的不同连接细节时。 如何在不阻塞具有不同连接细节的线程的情况下改进或共享地图。